Mar*_*ins 12 asp.net routing wildcard-mapping asp.net-4.0
我有一个简单的方法,当使用ASP.NET 4.0路由与Web窗体生成一个将充当某种通配符的路由?
在我看来,在WebForms中,你必须为每个页面指定一个路由 - 我正在寻找某种通用路由,可以在没有特定需要的地方使用,也许直接从路径映射到路径所以......
http://somedomain.com/folder1/folder2/page可能会映射到folder1/folder2/page.aspx
有什么建议?
谢谢
Nic*_*ver 24
您可以匹配所有剩余的路线,如下所示:
routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们知道所有路线,并希望将其他任何内容发送到"缺失"/ 404页面.请务必将此作为最后一条路线,因为它是一张通配符,可以捕捉所有内容.
或者,您可以以相同的方式注册路由,但在内部映射到页面,如下所示:
routes.Add(new Route("{*value}", new DefaultRouteHandler()));
Run Code Online (Sandbox Code Playgroud)
那个处理程序类会做你的通配符映射,如下所示:
public class DefaultRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//Url mapping however you want here:
var pageUrl = requestContext.RouteData.Route.Url + ".aspx";
var page = BuildManager.CreateInstanceFromVirtualPath(pageUrl, typeof(Page))
as IHttpHandler;
if (page != null)
{
//Set the <form>'s postback url to the route
var webForm = page as Page;
if (webForm != null)
webForm.Load += delegate { webForm.Form.Action =
requestContext.HttpContext.Request.RawUrl; };
}
return page;
}
}
Run Code Online (Sandbox Code Playgroud)
这在奇怪的地方有点破坏,以防止水平滚动,但你得到整体点.再次确保这是最后一条路线,否则它将处理 所有路线.
归档时间: |
|
查看次数: |
8863 次 |
最近记录: |