ASP.Net MVC:条件路由如何工作
问题描述:
我不是MVC中的高级开发人员。ASP.Net MVC:条件路由如何工作
我刚刚看了一个帖子,从这个网址Defining conditional routes
的问题是,如果用户以管理员身份登录,然后他会重定向到管理器,如果用户登录使用普通用户那么他将被重定向为用户控制器。
这是事情已经完成,但我只是不明白代码是如何工作的。所以帮助我理解代码。
using System;
using System.Web;
using System.Web.Routing;
namespace Examples.Extensions
{
public class MustBeAdmin : IRouteConstraint
{
public MustBeAdmin()
{ }
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// return true if user is in Admin role
return httpContext.User.IsInRole("Admin");
}
}
}
routes.MapRoute(
"Admins", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Admin", action = "Index", id = UrlParameter.Optional }, // Parameter default
new { controller = new MustBeAdmin() } // our constraint
);
1)布尔匹配()是任何在内置方法,或者它的用户定义一个?
2)已经采取行动,并控制提这样的路线
new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
,但再次提起同样喜欢这样
new { controller = new MustBeAdmin() }
3)这是什么线的含义{ controller = new MustBeAdmin() } ?
没有具体说明如果用户以普通用户身份登录,那么他将被重定向到用户控制器。
请帮我理解代码。
谢谢
答
你已经有了你的逻辑翻转。这里是你如何使用NotEqual约束排除缺省路由/管理页面:
using System;
using System.Web;
using System.Web.Routing;
public class NotEqual : IRouteConstraint
{
private string _match = String.Empty;
public NotEqual(string match)
{
_match = match;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return !httpContext.User.IsInRole(_match);
}
}
routes.MapRoute(
"Admins", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Admin", action = "Index", id = UrlParameter.Optional }, // Parameter default
new { controller = new NotEqual("Admin") }
);
它永远不会匹配一个非管理员。
Match
是在IRouteConstraint
interface的方法:
为什么负标记。我想了解路由约束如何工作,这就是为什么我发布它。 – Thomas
智能感知和互联网应该为您解答这些问题http://stephenwalther.com/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints – Jasen