我有一个测试控制器,我有一个索引操作接受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。请指导我。感谢
答案 0 :(得分:2)
您的路线定义需要包含custid
(不是id
)的段,以匹配参数的名称。路径定义还应包含使其唯一的控制器名称
routes.MapRoute(
name: "custom1",
url: "Test/{custid}", // modify
defaults: new { controller = "Test", action = "Index"}
);
请注意,您也可以删除custid = UrlParameter.Optional
,因为您不希望它是可选的