我想创建属性在MVC 5应用一个简单的约束路由:属性布线约束不带参数
public class UserAgentConstraint : IRouteConstraint
{
private string _requiredUserAgent;
public UserAgentConstraint(string requiredUserAgent)
{
_requiredUserAgent = requiredUserAgent;
}
public bool Match(HttpContextBase httpContext, Route route,
string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
return httpContext.Request.UserAgent != null &&
httpContext.Request.UserAgent.Contains(_requiredUserAgent);
}
}
在MVC 4我能以这种方式来注册它:
routes.MapRoute("ChromeRoute", "{*catchall}",
new { controller = "Home", action = "Index" },
new { customConstraint = new UserAgentConstraint("Chrome") });
我怎样才能达到相同的结果使用只有属性路由? 我知道我可以这样注册约束:
var constraintsResolver = new DefaultInlineConstraintResolver();
constraintsResolver.ConstraintMap.Add("UserAgent", typeof(UserAgentConstraint));
但如何将它添加到我的路由模式?是这样的:
[Route("Home/Index:UserAgent(Chrome)")]
public ActionResult Index() {}
不工作
此外,尝试添加约束后调用此方法 routes.MapMvcAttributeRoutes(constraintsResolver); – Kristofor
不幸的是,索引操作中没有任何参数。我很想通过客户约束的整个行动,而不仅仅是选定的参数(我没有) –
什么是试图完成?您是否试图在别处路由或阻止用户访问特定的用户代理?也许一个动作过滤器会更适合。 – Kristofor