![](/img/trans.png)
[英]HTTP CODE 405 (Method Not Allowed), When I sent POST data in ASP.NET WebAPI CORS
[英]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本机DirectoryListingModule
和DefaultDocumentModule
模块(不允许POST
动词)在TransferRequestHandler
(由MVC和WebAPI使用)能够处理它之前接管请求。
没有理由将InvitationsController.cs
放在与请求的路由匹配的同一目录结构中。 这就是为什么我们首先进行路由,以便能够动态注册路由,而不管控制器的物理位置如何。
通用约定(也是默认的WebAPI模板结构)是将控制器放在~/Controllers
目录(或~/Controllers/Api
)中。 但实际上,只要它们被编译为项目的一部分,您就可以将它们放在任何目录中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.