繁体   English   中英

ASP.NET WebAPI返回Http 405

[英]ASP.NET WebAPI returning Http 405

我有一个WebApi控制器

[RoutePrefix("api/invitations")]
public class InvitationsApiController : ApiController

一个动作方法:

[Route]
[HttpPost]
public IHttpActionResult Create([FromBody] CreateCommand command)

当我尝试POST到http:// host / api / invitations时,我得到一个“”405方法不允许“

但当我使用另一条路线时:

[Route("test")]
[HttpPost]
public IHttpActionResult Create([FromBody] CreateCommand command)

WebApiConfig.cs

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    SetupFormatters(config);

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi", 
        routeTemplate: "api/{controller}/{id}", 
        defaults: new { id = RouteParameter.Optional });
}

并发送到http:// host / api / invitations / test的工作。 我有控制器在请求“root”时工作得很完美。

有关Http错误的更多详细信息:

HTTP错误405.0 - 不允许的方法由于正在使用无效方法(HTTP谓词),因此无法显示您要查找的页面。

Detailed Error Information: 
Module    DefaultDocumentModule
Notification    ExecuteRequestHandler  
Handler    StaticFile  Error
Code    0x80070001  
Requested URL   http://localhost:8008/api/invitations  
Physical Path <removed>   
Logon Method  Anonymous  
Logon User    Anonymous

有什么建议可能有什么不对吗?

在控制器级别将控制器RoutePrefix声明更改为Route

[Route("api/invitations")]
public class InvitationsApiController : ApiController

RoutePrefix不会将路由添加到路由表。 这意味着,如果您想使用RoutePrefix ,您必须自己为每个操作添加前缀,例如:

[RoutePrefix("api/invitations")]
public class InvitationsApiController : ApiController

[Route("")]
[HttpPost]
public IHttpActionResult Create([FromBody] CreateCommand command)

问题是你有一个与你的路线匹配的物理目录( /api/invitations )。 因为存在这样的物理目录,IIS本机DirectoryListingModuleDefaultDocumentModule模块(不允许POST动词)在TransferRequestHandler (由MVC和WebAPI使用)能够处理它之前接管请求。

没有理由将InvitationsController.cs放在与请求的路由匹配的同一目录结构中。 这就是为什么我们首先进行路由,以便能够动态注册路由,而不管控制器的物理位置如何。

通用约定(也是默认的WebAPI模板结构)是将控制器放在~/Controllers目录(或~/Controllers/Api )中。 但实际上,只要它们被编译为项目的一部分,您就可以将它们放在任何目录中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM