ASP.NET RewritePath在浏览器更改时无法正常工作/ URL

时间:2009-05-12 15:41:17

标签: asp.net wcf rest

当我尝试在ASP.NET中重写URL时,我发现用户浏览器上的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
}

用户在浏览器中访问网址时会出现此问题。

http://localhost/Lab1Service.svc.pox,而是网址在浏览器中更改为http://localhost/Lab1Service.svc?format=pox

3 个答案:

答案 0 :(得分:3)

IIS管道可能更有可能不通过ASP.NET管道路由所有URL。所以它看到了.pox或.svc扩展,只是将它传递给通用的静态文件处理程序。

您的“修复”实际上隐藏了扩展,因此它将通过完整的.NET管道进行路由。

答案 1 :(得分:2)

我解决了这个问题。看来如果你在.svc扩展名之后没有包含尾部反斜杠,那么URL REDIRECTS而不是REWRITING。

这是我原来的

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

这是更正后的版本(注意.svc之后的正斜杠)

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

答案 2 :(得分:0)

我在我的重写器中使用了另一个上下文,也许这个问题就在这个

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

初始化HttpApplication上下文,然后重写路径

application.Context.RewritePath(rewritedUrl, Config.RebasePath);