只重写一个子路径的最快方法

时间:2014-11-21 14:18:05

标签: asp.net url-rewriting url-routing

我有一个在Classic ASP.NET中开发并在IIS 7.5上运行的网站。它工作正常。但现在我的任务是将联盟计划添加到我的网站。我希望我的reflink看起来像www.mywebsite.com/r/userid。好吧,我用Google搜索,发现我可以:

  1. 使用UrlRewrite第三方HttpModule。据我了解,它们基于runAllManagedModulesForAllRequests="true" web.config设置。从理论上讲,我可以:

  2. 设置runAllManagedModulesForAllRequests="true"并在RewritePath中手动执行Application_BeginRequest。但是我的Application_BeginRequest已经包含了一些代码。将所有页面,图像等发送到Application_BeginRequest是太沉重了,因为很少有人称之为URL。

  3. 所以,问题是如何只重写以www.mywebsite.com/r/开头的子路径,而不是为每个图像,css等调用Application_BeginRequest?如果没有第三方的话,那就最好。

1 个答案:

答案 0 :(得分:0)

好了,完成了HttpModule。

的web.config:

<system.webServer>
    <modules>
        <add name="ReflinkModule" preCondition="" type="www.ReflinkModule" />
    </modules>
</system.webServer>

ReflinkModule.cs:

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

public void BeginRequest(Object source, EventArgs e)
{
    if (HttpContext.Current == null)
        return;
    if (HttpContext.Current.Request == null)
        return;
    if (HttpContext.Current.Request.RawUrl == null)
        return;
    string start = "/r/";
    if (!HttpContext.Current.Request.RawUrl.StartsWith(start))
        return;
    string key = HttpContext.Current.Request.RawUrl.Substring(start.Length);
    HttpContext.Current.RewritePath("~/Xxxxx.aspx?r=" + key);
}