URL переписать угловой ASP.NET

Я использую перезапись URL-адреса, чтобы, если пользователь перезагружал страницу, он получал то же представление, которое перезагружал. В какой-то степени я получил то, что хотел. У меня есть 3 директории Admin и Users и Root. Я написал правила перезаписи для всех трех случаев. По отдельности все три работают нормально, т. Е. Если я использую по одному, он прекрасно работает для соответствующего каталога, но если попытаться перезагрузить страницу в другом каталоге, URL остается прежним, но отображаемая страница находится в другом каталоге. Для экземпляра у меня есть страница, открытая в каталоге пользователя, и загруженное представление - myprofile, так что теперь, если у меня сначала сохранено правило для каталога пользователя, оно будет работать нормально, но в этом случае предположим, что я под администратором, тогда, если я перезагрузлю, 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

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

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 переписать. Надеюсь, поможет.

Другие вопросы по тегам