为什么在HttpGet操作上的mvc属性路由也会影响没有路由属性的HttpPost,这是一个错误吗?

Ham*_*lla 5 asp.net-mvc asp.net-mvc-routing

我有两个动作,一个是带有此签名的HttpGet:

[Route("NewsLetter/SelectEmail/{page?}")]
[HttpGet]
public ActionResult SelectEmail(int? page, string priCat, string secCat)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

还有一个HttpPost有这个签名:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SelectEmail(int id)
{
...
}
Run Code Online (Sandbox Code Playgroud)

在为HttpGet方法设置上述路由之后,我注意到另一个方法HttpPost已停止工作,在挖掘之后我已经意识到路由HttpGet也为自己设置了HttpPost,直到我明确设置路由属性它才起作用为了它:

[Route("NewsLetter/SelectEmail/{id}")]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SelectEmail(int id)
{
...
}
Run Code Online (Sandbox Code Playgroud)

我想知道,这是一个错误吗?如果不是,那么无论如何设置路由属性[HttpGet]而不影响相应的[HttpPost]

joi*_*ops 1

您不能同时使用 POST 和 GET,因为您的 Action 将接受任何 HTTP 方法的请求。尝试使用 AcceptVerbsAttribute 限制 RouteTable 中的 HTTP 方法。 https://msdn.microsoft.com/en-us/library/system.web.mvc.acceptverbsattribute(v=vs.118).aspx