我想用一个简单的约束在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() {}
不起作用
答案 0 :(得分:0)
属性路由允许应用以下约束,并通过此格式{parameter:constraint}使用,例如[Route(" Index / {id:int}")]。所以你的属性应该是[Route(" Home / {Index:UserAgent(Chrome)}")]
答案 1 :(得分:0)
查看aspnetmvc源代码,有用,请尝试查看
RouteContraintAttribute,AreaAttribute和RouteAttribute
例如RouteConstraintAttribute:
https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNet.Mvc.Core/RouteConstraintAttribute.cs
我试图弄清楚如何做到这一点。