ASP.NET RewritePath не работает должным образом / изменение URL в браузере - PullRequest
3 голосов
/ 12 мая 2009

Когда я пытаюсь переписать URL-адрес в ASP.NET, я обнаруживаю, что URL-адрес изменяется в браузере пользователя. Я использую службы WCF REST и хочу изменить способ доступа к URL. См. Пример кода ниже.

У меня есть HttpModule, который перехватывает запросы.

public class FormatModule : IHttpModule
{
    #region IHttpModule Members

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void Init(HttpApplication application)
    {
        application.BeginRequest += new EventHandler(application_BeginRequest);
    }

    void application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        if (context.Request.RawUrl.Contains(".pox")) 
            context.RewritePath("~/Lab1Service.svc?format=pox", false);
        else if (context.Request.RawUrl.Contains(".json")) 
            context.RewritePath("~/Lab1Service.svc?format=json", false);
    }

    #endregion
}

Проблема возникает, когда пользователи посещают URL в своем браузере.

http://localhost/Lab1Service.svc.pox, вместо этого URL в браузере изменяется на http://localhost/Lab1Service.svc?format=pox.

Ответы [ 3 ]

3 голосов
/ 27 августа 2010

Вероятнее всего, конвейер IIS не маршрутизирует все URL-адреса через конвейер ASP.NET. Поэтому он видит расширение .pox или .svc и просто передает его через стандартные статические обработчики файлов.

Ваше «исправление» фактически скрывает расширение, поэтому оно маршрутизируется через полный конвейер .NET.

2 голосов
/ 12 мая 2009

Я решил это. Похоже, что если вы не включите обратную косую черту после расширения .svc, URL REDIRECTS вместо REWRITING.

Это был мой оригинал

context.RewritePath("~/Lab1Service.svc?format=pox", false);

Это исправленная версия (обратите внимание на косую черту после .svc)

context.RewritePath("~/Lab1Service.svc/?format=pox", false);
0 голосов
/ 12 мая 2009

Я использую в своем модуле перезаписи другой контекст, возможно, проблема в этом

public void Init(HttpApplication context){application = context;}

инициализирует контекст HttpApplication и затем переписывает путь

application.Context.RewritePath(rewritedUrl, Config.RebasePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...