C# 属性运算中的路径模糊

C# 属性运算中的路径模糊,c#,asp.net-mvc-3,attributerouting,C#,Asp.net Mvc 3,Attributerouting,我尝试在两种不同的动作方法上创建两条不同的路线,如下所示: [GET("/project/create")] public ActionResult Create() [GET("/project/{projectId}")] public ActionResult Details(int projectId) 问题是,当我导航到/project/create时,我被路由到详细信息页面,该页面失败,因为projectId不是int 我意识到我可以将细节路由更改为类似/project/{pro

我尝试在两种不同的动作方法上创建两条不同的路线,如下所示:

[GET("/project/create")]
public ActionResult Create()

[GET("/project/{projectId}")]
public ActionResult Details(int projectId)
问题是,当我导航到/project/create时,我被路由到详细信息页面,该页面失败,因为projectId不是int

我意识到我可以将细节路由更改为类似
/project/{projectd}/Details
的内容,但我希望它能以另一种方式工作

另外一个解决方案是将projectd设置为字符串,如果projectd==“Create”,则在内部重定向到Create操作,但这会让人感觉很糟糕


我用这个

如果使用v2.2或更高版本的属性路由,只需在项目id上指定:

[GET("/project/{projectId:int}")]
如果v2.2之前版本,您可以使用正则表达式达到相同的效果:

[GET("/project/{projectId(^[\\d]+$)}")]
但是,在更一般的情况下,您可以通过设置属性的
优先级
属性来指定控制器内路由的优先级:

[GET("/project/create", Precedence = 1)]
public ActionResult Create()

[GET("/project/{projectId}", Precedence = 2)]
public ActionResult Details(int projectId)

操作顺序应自动设置优先级。因此,如果您的创建操作早于详细信息,那么您应该没有问题。Preference属性最初是为了帮助在每个类中都有路由的分部类的用户而开发的


如果你不能正确地安排路线,或者需要进一步的控制,那么Rich的答案有很好的提示

谢谢你把它修好了!实际上,我尝试了你的第一个选项,认为它不起作用,但我没有使用2.2,但你的正则表达式做到了。谢谢