我的方案是:我有一个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 ;.我怎么处理这个?
答案 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" />