我配置了两条路线。其中一个包含两个约束
routes.MapRoute(
name: "Sur",
url: "sur/getsur/{key}/{opt}",
defaults: new
{
controller = "Sur",
action = "GetSur",
},
constraints:new { key = new GuidConstraint(), opt = new IntegerConstraint() });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Sur", action = "Index", id = UrlParameter.Optional }
);
如果我试图篡改调用URL,即没有提供正确的GUID,我希望我的routeconfig选择默认路由。
基本上我想要的是:
test.com/sur/getsur/ANILLEGALGUID/1 - 应该路由到默认路由。 test.com/sur/getsur/CORRECTGUID/ - 应该路由到默认路由。
我目前的路线设置得到的结果如下:
test.com/sur/getsur/ANILLEGALGUID/1
我得到了404。
test.com/sur/getsur/CORRECTGUID/NOINT
我收到此消息:参数字典包含参数'键'的空条目。非可空类型的System.Guid'方法' System.Web.Mvc.ActionResult GetSurvey(System.Guid,Int32)' in' xxx.Controllers.xxx'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
test.com/sur/getsur/ANILLEGALGUID
我收到此消息:参数字典包含参数'键'的空条目。非可空类型的System.Guid'方法' System.Web.Mvc.ActionResult GetSurvey(System.Guid,Int32)' in' xxx.Controllers.xxx'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
test.com/sur/getsur/ANILLEGALGUID/ILLEGALINT
我得到了404。
为什么会这样?我认为既然路线不匹配,它将默认为我的默认路线。我该如何解决这个问题?