URL重写例外情况,用于删除.aspx扩展名

时间:2018-02-18 09:44:42

标签: asp.net url-rewriting webforms asp.net-webpages

我的方案是:我有一个ASP.NET WebForm网站。用户可以在我的网站上创建自己的页面,他们的页面网址将是这样的:(MyWebsite.com/UserPage)。但它实际上是:(MyWebsite.com/UserPages.aspx?q=UserPage)。这意味着当您输入网址(MyWebsite.com/UserPage)时,它会重写网址并显示您的信息(MyWebsite.com/UserPages.aspx?q=UserPage)(但地址栏始终为(MyWebsite.com/UserPage)。 这是我的" UrlRewriting"中的代码。类:

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        if (app.Request.Path.Contains("/") && !app.Request.Path.Contains(".") && app.Request.Path.IndexOf("/") == app.Request.Path.LastIndexOf("/"))
        {
            string userPageTitle = app.Request.Path.Substring(app.Request.Path.IndexOf("/") + 1);
            if (!string.IsNullOrEmpty(userPageTitle ))
            {
                app.Context.RewritePath(string.Format("UserPages.aspx?q={0}", userPageTitle));
            }
        } 
   }

现在我的问题出现了:因为我说我的项目是ASP.NET WebForm,(所以,所有页面都有.aspx扩展名)我想删除我的Urls中的.aspx扩展名,我'我在web.config中尝试了一些正常工作的代码(正常情况下),但在我的情况下,如果你输入(MyWebsite.com/UserPage)它会考虑这个" UserPage",作为&# 34; UserPage.aspx&#34 ;.我怎么处理这个?

1 个答案:

答案 0 :(得分:0)

我通常使用ASP.NET Web Forms 4 +中提供的Routing执行此操作。

您在Global.asax中注册路线(网址格式),并指定哪个ASPX网页将处理该网址。

此示例将使UserPage.aspx处理其他ASPX页面未处理的所有URL。

void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapPageRoute("UserPageRoute", "{*url}", "~/UserPage.aspx");
}

然后在您的UserPage.aspx中,您可以通过查看Request.Url对象来确定所请求的网址,例如。 Request.Url.PathAndQuery

请注意,您可能需要一些额外的web.config设置才能生效,例如(管理无扩展的网址请求)...

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />