好吧,终于搞清楚了。我将尝试以简单的形式解释这一点,希望有一天能帮助别人。
这里要记住的几件事,首先,它是一个非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