如何使.NET WebForm路由与授权一起工作

我有从数据库注册到asp.net网站(非MVC)的路由。路线注册正常,它们都在我登录时工作。我要做的是根据一些路线数据创建一个登陆页面: 页面是[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>
等,以及许多变化,但似乎没有任何作用。 想法有人吗?我认为这是一个常见的问题,而且没有很好的记录。     
已邀请:
好的,终于搞清楚了。我将尝试以一种简单的形式解释这一点,希望有一天能帮助别人。 这里要记住几件事,首先,它是一个非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模型中的路由时,我从未在某个位置找到如何忽略其他静态文件类型。 我希望这可以帮助其他人,并节省他们用于跟踪所有这些并自己完成所有单元测试的时间。 享受乡亲。     

要回复问题请先登录注册