簡體   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