ASP.Net MVC:抛出异常的路由问题

时间:2018-05-29 09:44:27

标签: asp.net-mvc-5

我有一个测试控制器,我有一个索引操作接受custid作为参数。

这就是我的控制器的外观

public class TestController : Controller
{
    // GET: Test
    public ActionResult Index(int custid)
    {
        return View();
    }
}

我在route.config文件中添加了一个额外的路由语句。

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

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

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

所以当使用像 localhost:50675 / test / 101 这样的URL访问测试控制器操作时会出现错误。错误信息说

  

参数字典包含参数'custid'的空条目   非可空类型'System.Int32'的方法   'System.Web.Mvc.ActionResult Index(Int32)'中   'WebAPICRUD.Controllers.TestController'。必须是可选参数   引用类型,可空类型,或声明为可选类型   参数。参数名称:参数

但是当使用url访问测试控制器操作时,例如 localhost:50675 / test?custid = 101 ,然后没有错误。

所以我不明白代码中有什么错误。

我需要做什么,因此我可以发出应该有用的网址http://localhost:50675/test/101。请指导我。感谢

1 个答案:

答案 0 :(得分:2)

您的路线定义需要包含custid(不是id)的段,以匹配参数的名称。路径定义还应包含使其唯一的控制器名称

routes.MapRoute(
    name: "custom1",
    url: "Test/{custid}", // modify
    defaults: new { controller = "Test", action = "Index"}
);

请注意,您也可以删除custid = UrlParameter.Optional,因为您不希望它是可选的