MVC URI参数

时间:2014-02-01 15:13:05

标签: asp.net-mvc uri

控制器操作方法:

public ActionResult Details(int key)
{
    CustomerContext customerContext = new CustomerContext();
    var customer = customerContext.Customers.Single(c => c.CustomerKey == key);
    return View(customer);
}

注册路线:

routes.MapRoute(
           name: "Details",
           url: "{controller}/{action}/{key}",
           defaults: new { controller = "Customer", action = "Details", key = UrlParameter.Optional } );

当我使用这个uri:

     http://localhost/Lab100_1/customer/details?key=11000

我得到了正确的客户详细信息......但是

当我使用这个uri:

 http://localhost/Lab100_1/customer/details/11000

我收到此错误:

  

参数字典包含非可空类型'System.Int32'的参数'key'的空条目,用于'Lab100_1.Controllers.CustomerController'中的方法'System.Web.Mvc.ActionResult Details(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。


我已经尝试过: 然后路由配置:默认值(传递默认值):

 new { controller = "Customer", action = "Details", key = 0}
控制器动作方法中的

使参数为nullable:

public ActionResult Details(int? key)

然而我得到了同样的错误 - 我有一种感觉,如果传递参数作为查询字符串工作...然后为什么传递它作为URI参数不起作用... ???我有路线配置...任何帮助非常感谢...谢谢

1 个答案:

答案 0 :(得分:0)

我认为您的配置低于默认路由配置。您应该将其设置为优先于默认路由的优先级。所以你的路线配置应该是这样的 -

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default1",
            url: "{controller}/{action}/{key}",
            defaults: new { controller = "Customer", action = "Details", key = UrlParameter.Optional },
            constraints: new { key = @"\d+" } 
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

然后它应该工作。 更新:使用约束。