C# @Url.Action选择了错误的操作(AttributeRouting,asp.net mvc 5)
我有一个控制器,它有两种操作方法: 两者名称相同,但参数不同,其中一个是HttpGet,另一个是HttpPostC# @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
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})
应该选择一个与操作名称和指定参数匹配的路由,这意味着它应该获得urlTest/{id:int}/ActionName
它将获得。但是你说的HttpPost操作是什么意思呢?我的意思是,@Url.action
将返回第二个操作结果(带有HttpPost的操作)中指定的Url,而不是第一个。