2010-12-21 42 views
2

我有从数据库注册到asp.net网站(非MVC)的路由。该航线登记罚款,当我在我登录他们所有的工作是什么,我要做的是创建基于一些路由数据的登陆页:如何使NET WebForm路由与授权工作

页是[现场] /着陆/戴尔

路线看起来像:“登陆/ {客户端}”,它路由到我的页面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

作为一种解决方法,目前我评估了Request.QueryString [“ReturlUrl”]值并做了一些工作,但这并不好。这将使我能够完成工作,直到找到解决方案。仍然打开想法... – jakmas 2010-12-22 14:25:08

回答

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> 

在Application_Start空隙内Global.asax文件只需调用RegisterRoutes函数:

this.RegisterRoutes(RouteTable.Routes); 

重新启动您的服务器并完成。现在您的登录页面的路线将起作用,但是您的其他路线都将是安全的。如果您需要公开另一条路由,则只需将路由的基本路径添加到允许users =“*”的system.web授权部分即可。

另一件事,就是希望帮助他人的是能够将所有JavaScript(js),图像(psd,jpg,gif),真正的静态文件从路由处理程序中移出。在整个网络中,.axd和.asmx都进行了解释,但是在处理webforms模型中的路由时,它从来没有出现在我可以找到的其他静态文件类型忽略的位置。

我希望这可以帮助其他人,并为他们节省下来的时间,用于跟踪所有这些,并完成所有单元测试。

享受乡亲。

+0

Data.DataContext的命名空间是什么? – 2015-11-05 08:59:52