我有从数据库注册到asp.net网站(非MVC)的路由。路线注册正常,它们都在我登录时工作。我想要做的是根据一些路线数据创建一个登陆页面:
Page是[site] / landing / dell
路线看起来像是:“登陆/ {客户端}”并且它路由到我的页面Login.aspx,在那里我将客户端移出路线,然后根据值显示一些自定义品牌数据。
在我的web.config中,我将我的身份验证模式设置为表单,我的loginUrl =“Login.aspx”
当用户没有授权cookie时,它会将用户重定向到:
[site] /Login.aspx?ReturnUrl=%2flanding%2fdell而不是保留路由网址,并显示正确的数据。 IIS服务器实际上根本不处理路由,只是将用户发送到Login.aspx页面。
我已经尝试了几次添加到我的web.config:
<location path="landing"><system.web><authorization><allow users="*"/></auth></sys.web></loc>
等,以及许多变化,但似乎没有任何效果。
任何人的想法?我认为这是一个常见的问题,而且没有详细记录。
答案 0 :(得分:1)
好的,终于明白了。我将尝试以一种简单的形式解释这一点,希望有一天能帮助其他人。
这里要记住几件事,首先,它是一个非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>
在Global.asax文件的Application_Start中,只需调用RegisterRoutes函数:
this.RegisterRoutes(RouteTable.Routes);
重启服务器,完成了。现在您登录页面的路线将起作用,但您的所有其他路线都是安全的。如果您需要公开另一条路线,您只需要将路径的基本路径添加到system.web授权部分,并允许users =“*”。
其中的另一件事,希望能够帮助他人的是能够将所有javascript(js),图像(psd,jpg,gif),甚至是路由处理程序中的任何静态文件。在整个网络上,解释了.axd和.asmx,但是在处理webforms模型中的路由时,我从未在某个位置找到如何忽略其他静态文件类型。
我希望这可以帮助其他人,并节省他们花在跟踪所有这些内容并自己完成所有单元测试的时间。
尽情享受。