URL Переписать Angular ASP.NET

Я использую переписывание URL-адресов, поэтому, если пользователь перезагружает страницу, он должен приземлиться в том же представлении, которое он перезагрузил. В какой-то степени я получил то, что хотел. У меня есть 3 каталога Admin и Users и Root. Я написал правила перезаписи для всех трех случаев. По отдельности все три работают нормально, т.е. если я использую по одному, он отлично работает для соответствующего каталога, но если попытаться перезагрузить страницу в другом каталоге, URL-адрес останется прежним, но отображаемая страница будет из другого каталога. Например, у меня есть страница, открытая в каталоге пользователей, и загруженное представление - это мой профиль, поэтому теперь, если у меня есть правило для пользовательского каталога, сохраненное первым, оно будет работать нормально, но в этом случае предположим, что я под администратором, тогда, если я перезагружу URL-адрес, он будет таким же но отображаемая страница будет страницей по умолчанию для пользователя, но загруженное представление будет от администратора. И то же самое происходит для другого случая. Ниже мои правила

   <rule name="Admin Redirect Rule" stopProcessing="true">
      <match url="/(Admin)*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
      </conditions>
      <action type="Rewrite" url="/Admin/Admin.aspx" />
    </rule>

    <rule name="User Redirect Rule" stopProcessing="true">
      <match url="/(Users)*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
      </conditions>
      <action type="Rewrite" url="/Users/User.aspx" />
    </rule>

Я не могу понять, где я ошибаюсь. Потому что по отдельности оба правила работают нормально. но когда оба включены. отображаемая базовая страница меняется, хотя загруженное представление является правильным. Ниже приведена структура моего каталога.

Root
----Users
     -----User.aspx
----Admin
     -----Admin.aspx

Любая помощь будет оценена. Спасибо!


person Manish    schedule 11.03.2016    source источник


Ответы (1)


После многих дней борьбы, чтобы понять это, все еще не смог решить эту проблему, но придумал альтернативное решение. Делюсь решением. Надеюсь, это может помочь другим там. Наша цель здесь состоит в том, чтобы переписать URL-адрес так, чтобы мы фактически приземлились на представление, которое мы запросили. Итак, для этого мы использовали этот подход, у нас есть событие/метод Application_BeginRequest для приложения asp.net. Который выполняется непосредственно перед обработкой каждого запроса сервером. Мы можем использовать этот метод для перезаписи URL Вот простой пример.

protected void Application_BeginRequest(object sender, EventArgs e)
{
    // Get current path
    string CurrentPath = Request.Path;
    HttpContext MyContext = HttpContext.Current;

    Regex regex = new Regex(@"^\/");
    Match match = regex.Match(CurrentPath);
    // Now we'll try to  rewrite URL in form of example format:
    // Check if URL  needs rewriting, other URLs will be ignored
    if (CurrentPath.IndexOf("/Users/") > -1 )
    {
        // I will use  simple string manipulation, but depending
        // on your case,  you can use regular expressions instead
        // Remove /  character from start and beginning
        // Rewrite URL to  use query strings
        MyContext.RewritePath("/Users/User.aspx");
    }
    else if (CurrentPath.IndexOf("/Admin/") > -1)
    {
        MyContext.RewritePath("/Admin/Admin.aspx");
    }

    else if (match.Success)
    {
        MyContext.RewritePath("/Default.aspx");
    }

}

Таким образом, приведенный выше код перепишет соответствующий URL-адрес на основе запрошенного URL-адреса. так же, как переписать URL. Надеюсь, поможет.

person Manish    schedule 09.05.2016