此代码可以正常工作:
[RouteArea("Main", AreaPrefix = "Hello")]
[RoutePrefix("{orgCode}")]
public class ResponseController : BaseController {
[Route("Save/{formCode}/{responseId}")]
public ActionResult Save(string formCode, int responseId, string questionCode){}
}
例如,和Url.Action("Save", "Response")
会产生/Hello/org123/Save/form/123
但是,如果更改了Route属性并添加了另一个段:
[Route("Save/{formCode}/{responseId}/{questionCode}")]
然后Url.Action("Save", "Response")
产生一个空字符串。
路线中可以定义多少部分是否有限制?
答案 0 :(得分:0)
路线中可以定义多少部分是否有限制?
没有
但是MVC只能使用它知道的路由值来构建URL。这可以是传递到Url.Action()
方法的路由值和当前请求中的值(通常通过当前URL传递)的组合。
当框架尝试确定要使用的路由时,它会选择与所有路由值匹配的第一个路径 (控制器,操作和其他任何内容)和匹配所有(可选)约束。
如果以下所有条件对于任何参数均为真,则路线将不匹配:
UrlParameter.Optional
(注意:可选参数可能没有任何非可选参数)Url.Action()
(或其他调用UrlHelper
以生成网址的方法)简而言之,只有提供了所有必需参数并满足约束条件时,路径才会匹配。
因此,显然当前上下文中没有questionCode
,并且由于需要构建URL,因此您将获得一个空字符串。很可能你需要明确地传递它。
Url.Action("Save", "Response", new { questionCode = "123" })
如果网址中不存在其他参数,您还应该小心谨慎地传递其他参数。