当我尝试在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。
答案 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);