Asp.net 如何使用System.Web.Routing在Web表单中不重写URL?
我将System.Web.Routing与ASP.NET(3.5)Web表单一起使用,这些表单将从URL重写以下URLAsp.net 如何使用System.Web.Routing在Web表单中不重写URL?,asp.net,webforms,url-rewriting,url-routing,Asp.net,Webforms,Url Rewriting,Url Routing,我将System.Web.Routing与ASP.NET(3.5)Web表单一起使用,这些表单将从URL重写以下URL 到 代码如下: public static void RegisterRoutes(RouteCollection routes) { routes.Add("CampaignRoute", new Route (
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add("CampaignRoute", new Route
(
"{campaign_code}",
new CustomRouteHandler("~/default.aspx")
));
}
IRouteHandler实现:
public class CustomRouteHandler : IRouteHandler
{
public CustomRouteHandler(string virtualPath)
{
VirtualPath = virtualPath;
}
public string VirtualPath { get; private set; }
public IHttpHandler GetHttpHandler(RequestContext
requestContext)
{
if (requestContext.RouteData.Values.ContainsKey("campaign_code"))
{
var code = requestContext.RouteData.Values["campaign_code"].ToString();
HttpContext.Current.RewritePath(
string.Concat(
VirtualPath,
"?campaign=" + code));
}
var page = BuildManager.CreateInstanceFromVirtualPath
(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}
然而,我注意到在我现有的aspx页面上有太多的东西需要更改(即指向javascript的链接、指向css文件的链接)
谢谢。不建议将重写与ASP.NET URL路由结合使用,因为ASP.NET URL路由的某些实现在内部也使用重写(这取决于ASP.NET的版本)。使用重写的两个不同组件的组合可能会导致冲突(尽管我不能100%确定这就是为什么您会看到这个问题) 关于使用传输/重定向/重写: 我最强烈的建议是不要使用它们!与重定向(或其他任何操作)不同,只需让ASP.NET通过从iroutHandler返回页面来直接调用页面,就像您已经在做的那样(只是不需要调用重写)。只要您的
IRouteHandler
将routedData
保存在某个地方,页面就可以从路由中获取数据,您就可以开始了
请看一个如何保存路由数据的示例(或者只使用他的代码!)
关于忽略模式:
您可以使用IRouteConstraint来约束哪些URL与您的路由匹配。有一个内置的默认路由约束实现,它使用正则表达式,但您也可以编写自定义路由约束。以下是一个例子:
Route r = new Route(...);
r.Constraints = new RouteValueDictionary(new {
campaign_code = "\d{5}", // constrain to 5-digit numbers only
other_value = new CustomRouteConstraint(), // call custom constraint
});
CustomRouteConstraint是一个可以编写派生自的类
关于CSS和JPG等静态文件,我应该注意的一点是,默认情况下,它们总是被排除在路由之外。默认情况下,路由将忽略与磁盘上的物理文件完全匹配的模式。您可以通过设置
RouteTable.Routes.RouteExistingFiles=true来更改此行为,但这不是默认设置。我可以问一下URL重写和URL路由之间的区别吗?抱歉,如果我在这里是个白痴,但我真的不知道。ASP.NET意义上的URL重写是一个中间步骤,可以通过更改ASP.NET使用的内部URL来更改当前请求的处理方式。URL路由是一项新功能,它通过直接将incomgin请求映射到IHttpHandler来避免使用URL重写。