我有一个简单的方法,当使用ASP.NET 4.0路由与Web窗体产生一个路径,将作为某种通配符?asp.net 4.0 web窗体路由 - 默认/通配符路由
在我看来,在WebForms中,你必须为每个页面指定一个路由 - 我正在寻找某种通用路由,可以在没有特殊要求的情况下使用,也许可以直接从路径映射到路径。 ..
http://somedomain.com/folder1/folder2/page将可能映射到文件夹1 /文件夹2/page.aspx
有什么建议?
感谢
我有一个简单的方法,当使用ASP.NET 4.0路由与Web窗体产生一个路径,将作为某种通配符?asp.net 4.0 web窗体路由 - 默认/通配符路由
在我看来,在WebForms中,你必须为每个页面指定一个路由 - 我正在寻找某种通用路由,可以在没有特殊要求的情况下使用,也许可以直接从路径映射到路径。 ..
http://somedomain.com/folder1/folder2/page将可能映射到文件夹1 /文件夹2/page.aspx
有什么建议?
感谢
可以匹配这样所有剩余的路线:
routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx");
在这种情况下,我们知道所有的路线,想发什么别的了“失踪”/404页。只要确保把它作为最后的路由,因为它是一个通配符,并且会捕获所有内容。
或者你可以注册一个路径以同样的方式,但在内部做映射到一个页面,如下所示:
routes.Add(new Route("{*value}", new DefaultRouteHandler()));
这个处理类会做你的通配符映射,这样的事情:
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;
}
}
这在有些奇怪的地方被打破了,以防止水平滚动,但是您可以获得整体观点。再次确认这是最后路线,否则它会处理全部您的路线。
另外 - 请记住,你需要添加一个异常的个.axd文件在Global.asax文件中是否有验证控件在你的web应用程序:
否则,你会不断收到语法错误,因为路由选择了.axd文件,并且没有正确加载验证控件所需的JavaScript文件。
链接是私人的,或博客是私人的。 – GoldBishop 2017-10-08 17:15:37
是否有可能然后做这样的事情: Dim prospect As String = Page.RouteData.Values(“* value”) 我知道它是当它不是通配符,但通配符呢? – davemackey 2012-05-10 14:57:17
我收到以下错误。我错过了什么? (.Net 4.5) System.Web.Routing.RouteBase'不包含'Url'的定义,并且没有找到接受'System.Web.Routing.RouteBase'类型的第一个参数的扩展方法'Url'你错过了一个使用指令或程序集引用?) – HGMamaci 2014-02-16 21:38:38