【发布时间】:2015-08-15 16:33:09
【问题描述】:
我在同一个控制器上有两个动作,具有相同的路由,但 HttpMethod 要求不同(POST 与 DELETE)。
[AllowAnonymous]
public class TestController : ApiController
{
[Route("~/api/test")]
[HttpDelete]
public IHttpActionResult Endpoint1()
{
return this.Ok("endpoint1");
}
[Route("~/api/test")]
[HttpPost]
public IHttpActionResult Endpoint2()
{
return this.Ok("endpoint2");
}
}
这一切都很好——从DELETE 切换到POST 时,两个端点都可以工作。
例如
DELETE /api/test = endpoint1
POST /api/test = endpoint2
如果我将动作分成单独的控制器,它就不再起作用了:
[AllowAnonymous]
public class TestController : ApiController
{
[Route("~/api/test")]
[HttpDelete]
public IHttpActionResult Endpoint1()
{
return this.Ok("endpoint1");
}
}
[AllowAnonymous]
public class TestController2 : ApiController
{
[Route("~/api/test")]
[HttpPost]
public IHttpActionResult Endpoint2()
{
return this.Ok("endpoint2");
}
}
例如
DELETE /api/test = endpoint1
POST /api/test = { "Message": "The requested resource does not support http method 'POST'." }
这是框架预期的吗?
编辑: 确切的 WebAPI 包版本是:5.2.3
【问题讨论】:
-
1.最好指定您正在使用的 Web API 的版本。 2.路由中的“~/”不是必需的,“api/test”可以正常工作
-
为什么不将所有与控制器相关的http动词都放在一个控制器中?
-
@YishaiGalatzer: 1. 更新到指定版本。 2.不管~与否,都会出现同样的问题。
-
@woogy -- 我在大多数情况下都这样做 -- 但这篇文章的目的是显示在不按控制器分组时发现的问题,而是显示他们正在执行的操作。
-
是的 - ~/ 只是风格
标签: c# asp.net-web-api asp.net-web-api-routing