![](/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.