c# OWIN Web API - 发现多个与 request:GET 匹配的操作

c# OWIN Web API - Multiple actions were found that match the request:GET

我在尝试使用两种不同的 GET 方法时遇到问题,一种用于检索大量资源,另一种用于检索特定资源。

Startup.cs

  config.Routes.MapHttpRoute("DefaultAPI",
            "api/{controller}/{action}",
            new { id = RouteParameter.Optional });

Controller.cs

[RoutePrefix("api/Files")]
public class FileController : ApiController
{
    //   /api/Files/
    [Authorize]
    [Route("")]
    public IHttpActionResult GetAll()
    {

    }

    //   /api/Files/Id/
    [Authorize]
    [Route("Id")]
    public async Task<HttpResponseMessage> Get([FromBody] string id)
    {
    }

    //   /api/Files/Upload
    [Authorize]
    [HttpPost]
    [Route("Upload")]
    public async Task<HttpResponseMessage> Post()
    {
    }

    //   /api/Files/Delete
    [Authorize]
    [Route("Delete")]
    public IHttpActionResult Delete([FromBody] string id)
    {
    }

这对我来说是新的,我知道我在同时使用 IHttpActionResult 和 HttpResponseMessage 时也犯了一个错误,但我想我稍后会在弄清楚路由后更改它。

错误:

当Startup.cs有

"api/{controller}/{action}"

,它 returns 一个 404 未找到, 当它是 "api/{controller}/{id}" 时,错误是:

Multiple actions were found that match the request: \r\nGetAll

如果您使用基于属性的路由,则需要在 Startup.cs 中声明任何 WebAPI 路由之前添加以下代码:

config.MapHttpAttributeRoutes();