4

私は WebApi コントローラーを持っています

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

そしてアクションメソッド:

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

http://host/api/invitationsに POST しようとすると、""405 Method Not Allowed" というメッセージが表示されます</p>

しかし、次のような別のルートを使用すると:

[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に POST を送信して、その動作をテストします。「ルート」を要求するときに完璧に機能するコントローラーがあります。

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

何が間違っている可能性がありますか?

4

2 に答える 2

2

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)
于 2015-09-01T08:02:54.563 に答える