我有一个名为Account的控制器,其操作具有以下签名:
public ActionResult Verify(string userName,Guid authorisationToken);
/Account/Verify/sachin13/409bdaaa-0b65-4bb8-8695-6e430323d8f8
The constraint entry 'Length' on the route with URL 'Account/{Verify}/{userName}/{authorisationToken}' must have a string value or be of a type which implements IRouteConstraint.
这是我的RegisterRoutes方法在Global.asax中的样子:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional },// Parameter defaults new[] { "UI.Controllers" } ); routes.MapRoute( "AccountVerify","Account/{Verify}/{userName}/{authorisationToken}",new { controller = "Account",action = "Verify",userName = "",authorisationToken = "" },"UI.Controllers" ); }
两个问题:
>我做了一些与众不同的事情,还是我的方法符合标准做法?
>这是什么问题?
谢谢,
萨钦
解决方法
你应该改变
“UI.Controllers”
至
new [] {“UI.Controllers”}
在你的第二条路线.
如果你只指定一个字符串(不是一个数组),那么你得到错误的MapRoute函数重载 – 而不是MapRoute(RouteCollection,String,Object,String []),它接受一个命名空间列表作为你得到的最后一个参数MapRoute(RouteCollection,Object),它将约束作为最后一个参数.字符串“UI.Controllers”不是正确的约束规范=>你得到错误.
另外,@ Pankaj建议您的自定义路由应该在默认值之前,并且验证应该没有“{}”.
完整代码:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "AccountVerify","Account/Verify/{userName}/{authorisationToken}",new [] { "UI.Controllers" } ); routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",// Parameter defaults new[] { "UI.Controllers" } ); }