我的解決方案 - 除非有人提出一個更優雅的 - 是修改WebFormRouting項目中的WebFormRouteHandler類以接受自定義謂詞。
public WebFormRouteHandler(string virtualPath, bool checkPhysicalUrlAccess, Func<RequestContext, string> custom)
然後在類內部,我將自定義參數存儲到私有的CustomVirtualPath屬性中。要使用它,我不得不GetSubstitutedVirtualPath改成這樣:
public string GetSubstitutedVirtualPath(RequestContext requestContext)
{
string path = VirtualPath;
if (CustomVirtualPath != null)
{
path = CustomVirtualPath(requestContext);
}
if (!path.Contains("{")) return path;
//Trim off ~/
string virtualPath = path.Substring(2);
Route route = new Route(virtualPath, this);
VirtualPathData vpd = route.GetVirtualPath(requestContext, requestContext.RouteData.Values);
if (vpd == null) return path;
return "~/" + vpd.VirtualPath;
}
該項目要編譯我們需要改變WebFormRoute和WebFormRouteExtensions允許自定義參數環比下跌的傳遞。當所有做我可以的global.asax.cs
routes.MapWebFormRoute("All", "{any}.aspx", "~/", false,
context =>
{
return ((string)context.RouteData.Values["any"] == "test"
? "~/PageProcessor.aspx"
: "~/DifferentPageProcessor.aspx");
});
當然lambda表達式應該查找從別的地方(數據庫或緩存)的URL的身體寫這篇文章。
來源
2009-05-20 21:58:42
pbz