【问题标题】:ASP.NET RewritePath not working as expected / URL in browser changingASP.NET RewritePath 未按预期工作/浏览器中的 URL 更改
【发布时间】:2009-05-12 15:41:17
【问题描述】:

当我尝试在 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
}

当用户在浏览器中访问 URL 时会出现问题。

http://localhost/Lab1Service.svc.pox,而是将浏览器中的 URL 更改为 http://localhost/Lab1Service.svc?format=pox

【问题讨论】:

    标签: asp.net wcf rest


    【解决方案1】:

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

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

    【讨论】:

    • 是的,实际的修复方法是将其放置在 system.webserver 部分中:<modules runAllManagedModulesForAllRequests="true" />
    【解决方案2】:

    我解决了这个问题。看来,如果您在 .svc 扩展名之后不包含尾随反斜杠,则 URL 会重定向而不是重写。

    这是我的原创

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

    这是修正后的版本(注意 .svc 后面的正斜杠)

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

    【讨论】:

    • 这很奇怪..你一定已经注册了任何其他处理程序/模块,whis 正在做那个重定向..
    • 这实际上是一个正斜杠。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2011-06-19
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多