我想創建屬性在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