我尝试在两种不同的操作方法上创建两种不同的路由,如下所示:
[GET("/project/create")]
public ActionResult Create()
[GET("/project/{projectId}")]
public ActionResult Details(int projectId)问题是,当我导航到/project/create时,我被路由到详细信息页面,这会失败,因为projectId不是一个整数。
我意识到我可以将细节路由更改为类似于/project/{projectId}/details的东西,但我希望它以另一种方式工作。
另一种解决方案是将projectId设置为字符串,如果projectId ==为" Create“,则在内部重定向到create操作,但这会让人感觉很糟糕。
为此,我使用了AttributeRouting。
发布于 2012-06-01 19:46:08
如果您使用的是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)发布于 2012-06-02 00:55:53
操作的顺序应自动设置优先级。因此,如果您的创建操作在详细信息之前,那么您应该没有问题。Precedence属性最初是为了帮助那些在每个类中具有路由的分部类的用户而开发的。
如果你不能对你的路线进行适当的排序,或者需要进一步的控制,那么Rich的答案有很好的提示。
https://stackoverflow.com/questions/10849569
复制相似问题