私の解決策 - 誰かがより優雅なものを思い付かない限り、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を変更する必要があります。すべてが終わったとき、私は、ラムダ式の本体は、いくつかの他の場所(データベースまたはキャッシュ)からURLを調べる必要がありますglobal.asax.csもちろん
routes.MapWebFormRoute("All", "{any}.aspx", "~/", false,
context =>
{
return ((string)context.RouteData.Values["any"] == "test"
? "~/PageProcessor.aspx"
: "~/DifferentPageProcessor.aspx");
});
でこれを書くことができます。
出典
2009-05-20 21:58:42
pbz