传递 web api 参数时 404

404 when passing web api parameters

我正在尝试让这个方法起作用:

public class DocumentenController : ApiController
{    
    [HttpPost]
    [Route("DeleteDocument/{name}/{planId}")]
    public IHttpActionResult DeleteDocument(string name, int planId)
    {
      _documentenProvider.DeleteDocument(planId, name);
      return Ok();
    }
}

这是 WebApiConfig :

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: UrlPrefix + "/{controller}/{action}/{id}",
    defaults: new {id = RouteParameter.Optional}
);

但是当我使用 post:

这样调用它时,我得到了 404
http://localhost/QS-documenten/api/documenten/deletedocument/testing/10600349

解决这个问题的正确方法是什么?

您必须按照以下方式发送请求:

http://localhost/QS-documenten/deletedocument/testing/10600349

当您使用路由属性时,自定义路由会覆盖默认的 api 路由配置。

示例中的 URL 与控制器上的属性路由不匹配。

得到

http://localhost/QS-documenten/api/documenten/deletedocument/testing/10600349

工作,假设 http://localhost/QS-documenten 是主机和根文件夹,api/documenten 是 api 前缀然后向控制器添加路由前缀...

[RoutePrefix("api/Documenten")]
public class DocumentenController : ApiController {
    //eg POST api/documenten/deletedocument/testing/10600349
    [HttpPost]
    [Route("DeleteDocument/{name}/{planId}")]
    public IHttpActionResult DeleteDocument(string name, int planId) {
        _documentenProvider.DeleteDocument(planId, name);
        return Ok();
    }
}

来源:Attribute Routing in ASP.NET Web API 2 : Route Prefixes