ASP.Net MVC:等等......默认路由参数必须被命名为id?

Pro*_*ool 0 asp.net-mvc routes

其他人遇到过这个问题吗?我必须做错事.

所以我正在为这样的错误设置一条路线:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);
Run Code Online (Sandbox Code Playgroud)

并呼吁:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));
Run Code Online (Sandbox Code Playgroud)

在控制器上:

public ActionResult Error(String error)
Run Code Online (Sandbox Code Playgroud)

简单吧?好吧,当它实际运行时,尽管url看起来像是错误,但错误为空:

/共享/错误/ ThisIsTheError

但是Error方法中的error参数为null.(是的,我尝试过其他的话)

现在,如果我用"id"这个词替换所有内容,一切正常.

的Global.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);
Run Code Online (Sandbox Code Playgroud)

重定向:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));
Run Code Online (Sandbox Code Playgroud)

共享控制器:

public ActionResult Error(String id)
Run Code Online (Sandbox Code Playgroud)

如果你有一个默认路由值,那么id是否必须包含所有路由的字?

DSO*_*DSO 5

您始终需要指定控制器和操作参数:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);
Run Code Online (Sandbox Code Playgroud)

我猜测使用id的原因是因为你有默认路由仍然注册,它有id作为参数和控制器和动作的默认值.

请注意,如果您仍有默认路线,请确保之前添加路线,否则它将首先匹配另一条路线.