我正在尝试在两个不同的操作方法上创建两个不同的路径,如下所示:
[GET("/project/create")]
public ActionResult Create()
[GET("/project/{projectId}")]
public ActionResult Details(int projectId)
问题是当我导航到/ project / create时,我被路由到Details页面,因为projectId不是int,所以它失败了。
我意识到我可以将详细信息路由更改为/project/{projectId}/details
之类的内容,但我希望它能以其他方式工作。
另外一个解决方案可能是使projectId成为一个字符串,如果projectId ==“create”,内部重定向到Create操作,但那会觉得很糟糕。
我正在使用AttributeRouting。
答案 0 :(得分:3)
如果您使用的是v2.2或更高版本的属性路由,则只需在项目ID上指定constraint:
[GET("/project/{projectId:int}")]
如果在v2.2之前你可以使用正则表达式来达到同样的效果:
[GET("/project/{projectId(^[\\d]+$)}")]
但是在更一般的情况下,您可以通过设置属性的Precedence
属性来指定控制器中路由的precedence:
[GET("/project/create", Precedence = 1)]
public ActionResult Create()
[GET("/project/{projectId}", Precedence = 2)]
public ActionResult Details(int projectId)
答案 1 :(得分:0)
操作的顺序应自动设置优先级。因此,如果您的创建操作在详细信息之前,那么您应该没有问题。 Precedence属性最初是为了帮助那些具有路径的部分类的用户。
如果您无法正确订购路线或需要进一步控制,那么Rich的答案有很好的建议。