C# @Url.Action选择了错误的操作(AttributeRouting,asp.net mvc 5)

C# @Url.Action选择了错误的操作(AttributeRouting,asp.net mvc 5),c#,asp.net-mvc,asp.net-mvc-5,routing,attributerouting,C#,Asp.net Mvc,Asp.net Mvc 5,Routing,Attributerouting,我有一个控制器,它有两种操作方法: 两者名称相同,但参数不同,其中一个是HttpGet,另一个是HttpPost public class TestController : Controller { [Route("Test/{id:int}/ActionName"), HttpGet] public ActionResult ActionName(int id) { ... } [Route("Test/ActionName"), HttpPost] pub

我有一个控制器,它有两种操作方法:

两者名称相同,但参数不同,其中一个是HttpGet,另一个是HttpPost

public class TestController : Controller {

    [Route("Test/{id:int}/ActionName"), HttpGet]
    public ActionResult ActionName(int id) { ... }

    [Route("Test/ActionName"), HttpPost]
    public ActionResult ActionName(TestObject obj) { ... }
}

public class TestObject {
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}
当我执行
@Url.Action(“ActionName”,new{id=3})
时,我希望选择HttpGet操作,但HttpPost操作是


我知道,如果我在第一个路由中将顺序设置为1,在第二个路由中将顺序设置为2,它将按预期工作,但我想知道为什么它没有被选中。

@Url.Action(“ActionName”,new{id=3})
将输出
/Test/ActionName/3
-即
字符串(它不选择操作)。如果选择了HttpPost操作,您的意思是什么?您所展示的代码中没有任何与向这些方法中的任何一个发送GET或POST相关的内容。我不是在发送GET或POST,简单地说,在我的理解中,
@Url.Action(“ActionName”,new{id=3})
应该选择一个与操作名称和指定参数匹配的路由,这意味着它应该获得url
Test/{id:int}/ActionName
它将获得。但是你说的HttpPost操作是什么意思呢?我的意思是,
@Url.action
将返回第二个操作结果(带有HttpPost的操作)中指定的Url,而不是第一个。