0

私のwebserviceが公開する機能のための簡単なREST APIを行いたいと思います。ASP.NET Web Api 2 - パラメータがサポートされていないGET

[RoutePrefix("companies")] 
public class CompaniesController : BaseApiController { 

    [HttpGet, Route("{companyId:int}")] 
    public CustomResponse Get(int companyId) { } 

    [HttpPost] 
    public CustomResponse Post(CompanySaveViewModel model) { } 

    [HttpDelete, Route("{companyId:int}"] 
    public CustomResponse Delete(int companyId) { } 
} 

これは正常に動作するはずです。 POSTメソッドは正常に動作しています。私がGETおよび/またはDELETEメソッドを呼び出すしようとすると、しかし、私は下のメッセージが表示されました:

私は、与えられたURLを使用してこれらのメソッドを呼び出すためにしようとしている:

http://localhost:11111/api/companies/1 [GET]

http://localhost:11111/api/companies/1

enter image description here

POSTが正常に動作して[削除]。パラメータなしでGET を呼び出そうとすると、正常に動作します。この問題は、GET/DELETEメソッドのパラメータがあるときに表示されます。何が問題なの?

ありがとうございました!

+0

'RoutePrefix'を削除して同じものを試してください –

答えて

2

あなたのPOSTアクションにルートを追加してみてください:

[HttpPost, Route("")] 
public CustomResponse Post(CompanySaveViewModel model) { } 

これはあなたのルーティング定義に一貫性を確保します:どちらかあなたは属性ベースのルーティングを使用するか、またはあなたが個人的に私は明示的な属性を好む(グローバル規則ベースのルーティングを使用しますベースルーティング)。私はまた、ルートの2種類を混合避け、あなたの設定からのルートをベース規則を削除するために、あなたをお勧めします:

config.MapHttpAttributeRoutes(); 

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

はまた時にブートストラップ属性ベースのルーティングを有効にすることを忘れないでください

属性ベースルーティングのnice overviewはこちらです

+0

ありがとう、@ダリン!デフォルトのHTTPルーティングを削除することで、魅力的なように動作し始めました。私はアプリケーションがルーティング規則をミスリーディングしていたと思うし、ルート規則または基本定義規則を使用する必要があるかどうかはわかりませんでした。ありがとう! – Kiwanax

関連する問題