MVC路由的奇怪问题 - 崩溃

时间:2014-10-22 06:31:55

标签: asp.net asp.net-mvc asp.net-mvc-4 routes asp.net-mvc-routing

我配置了两条路线。其中一个包含两个约束

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。

为什么会这样?我认为既然路线不匹配,它将默认为我的默认路线。我该如何解决这个问题?

0 个答案:

没有答案