好吧,終於搞清楚了。我將嘗試以簡單的形式解釋這一點,希望有一天能幫助別人。
這裏要記住的幾件事,首先,它是一個非MVC應用程序,純粹是webforms。
在我Global.ascx,有一個方法:
void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
routes.Add(new Route("{service}.asmx/{*pathInfo}", new StopRoutingHandler()));
routes.Add(new Route("*.psd/{*pathinfo}", new StopRoutingHandler()));
routes.Add(new Route("*.js/{*pathinfo}", new StopRoutingHandler()));
routes.Add(new Route("*.jpg/{*pathinfo}", new StopRoutingHandler()));
routes.Add(new Route("*.gif/{*pathinfo}", new StopRoutingHandler()));
routes.Add(new Route("{resource}.css/{*pathinfo}", new StopRoutingHandler()));
routes.RouteExistingFiles = false;
Data.DataContext context = new Data.DataContext();
var AppRoutes = (from r in context.SomeRouteTable
select r).ToList();
foreach (var AppRoute in AppRoutes)
{
routes.MapPageRoute(AppRoute.RouteName,
AppRoute.RouteUrl,
AppRoute.PhysicalFile, false);
// The important part is the "false" above. It is the
// CheckPhysicalUrlAccess parameter.
}
}
現在,在web.config中,一個條目需要添加:
<location path="landing"><system.web><authorization><allow users="*"/></authorization></system.web></location>
在Application_Start空隙內Global.asax文件只需調用RegisterRoutes函數:
this.RegisterRoutes(RouteTable.Routes);
重新啓動您的服務器並完成。現在您的登錄頁面的路線將起作用,但是您的其他路線都將是安全的。如果您需要公開另一條路由,則只需將路由的基本路徑添加到允許users =「*」的system.web授權部分即可。
另一件事,就是希望幫助他人的是能夠將所有JavaScript(js),圖像(psd,jpg,gif),真正的靜態文件從路由處理程序中移出。在整個網絡中,.axd和.asmx都進行了解釋,但是在處理webforms模型中的路由時,它從來沒有出現在我可以找到的其他靜態文件類型忽略的位置。
我希望這可以幫助其他人,併爲他們節省下來的時間,用於跟蹤所有這些,並完成所有單元測試。
享受鄉親。
作爲一種解決方法,目前我評估了Request.QueryString [「ReturlUrl」]值並做了一些工作,但這並不好。這將使我能夠完成工作,直到找到解決方案。仍然打開想法... – jakmas 2010-12-22 14:25:08