GET、DELETE、POST、およびPUTのメソッドを持つコントローラを持つWeb APIプロジェクトがあります。Wep Api - 405メソッドが許可されていません
このコントローラにPOSTまたはPUTを実行しようとすると、常に405 Method Not Allowedエラーが発生します。送信されるデータは有効に見えますが、これは6つの単純なプロパティを持つオブジェクトです。私は自分のメソッドにブレークポイントを設定し、この場合は期待通りにヒットしません。着信要求と発信応答を検査するためにDelegatingHandler(Web Api - Catch 405 Method Not Allowedに記載)を登録しました。私の要求がApiによって処理されていることがわかります(クライアントに問題がないことを意味します)。私はまた、リクエスト/レスポンスを調べるためにFiddlerを使い、レスポンスヘッダはSecurity:Allow:DELETE、GETの下で言いました。
これは明らかに[HttpPost]属性と[HttpPut]属性で装飾されたメソッドを持っていて、正しく設定されたルーティングを持っていても、PUTとPOSTは許されません。私はデフォルトのルーティングを使用していますが、属性ルーティングを使用するメソッドもあります。
セキュリティ上の問題があるようですが、私は他のコントローラでPOSTとPUTを実行できますが、問題の原因と思われる違いはありません。任意の助けをいただければ幸いです
public class PricesController : ApiController
{
// DELETE: api/Prices/5
[HttpDelete]
[ResponseType(typeof(Price))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> DeletePrice(int id)
{
// code omitted
}
// GET: api/Prices/5
[HttpGet]
[ResponseType(typeof(Price))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> GetPrice(int id)
{
// code omitted
}
// GET: api/Prices
[HttpGet]
[Route("api/Prices")]
public IQueryable<Price> GetPrices()
{
// code omitted
}
// POST: api/Prices
[HttpPost]
[ResponseType(typeof(Price))]
[Route("api/Prices", Name = "Prices")]
public async Task<IHttpActionResult> PostPrice(Price price)
{
// code omitted
}
// PUT: api/Prices/5
[HttpPut]
[ResponseType(typeof(void))]
[Route("api/Prices/{id:int}")]
public async Task<IHttpActionResult> PutPrice(int id, Price price)
{
// code omitted
}
}
:
は、ここに私のコードの抜粋です。私はこれを理解しようと一日中過ごしました。
いくつか確認してください。 WebApiConfigの規則ベースのルートの前に属性のルーティングが有効になっていることを確認してください。 web.configをチェックして、動詞がハンドラ内のパスに許可されていることを確認します。あなたがその行動をどのように呼び出すかも示します。どのURLを使用しますか – Nkosi
属性ルーティングが有効になっています。私はしばらく使用しています。このアプリには56のコントローラがあり、そのほとんどはGET、DELETE、POST、PUT操作をサポートしています。クライアントは、リソースでAngular 1.xを使用しています。これは、この問題が発生していないアプリケーション全体で同様のパターンを使用しています。 – DesertFoxAZ
デバッグヘルプ( "**なぜこのコードは動作しないのですか?**")には、目的の動作、特定の問題またはエラー、およびそれを再現するのに必要な最短コード**を質問**に含める必要があります。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[mcve]を作成する方法。 – Nkosi