以下はWebAPIアクションです。以下のエラーについてグーグルで:
要求されたリソースはhttpメソッド 'POST'をサポートしていません
リンクの数を取得し、それに応じてAPIを更新しましたが、それでも同じエラーが発生します。
ASP.NET Web API:要求されたリソースはhttpメソッド 'GET'をサポートしていません
[AcceptVerbs("POST")]
[HttpPost]
[Route("rename/{userId}/{type}/{title}/")]
public IHttpActionResult Rename([FromBody] int userId, [FromBody] string type, [FromBody] string title)
{
//my api stuff
}
しかし、それでもポストマン経由で上記を呼び出すと、エラーがスローされます。
このエラーを取り除くにはどうすればよいですか?
また、メソッドパラメータリストで[FromBody]
属性を使用せずにこれを修正することは可能ですか?
どんな助け/提案も高く評価されます。ありがとう。
URLパラメータを必要とするルートを宣言しました
_[Route("rename/{userId}/{type}/{title}/")]
_
したがって、_api/customer/rename
_にリクエストを送信すると、このメソッドと一致しません。リクエスト本文で渡すパラメータをルートパラメータから削除する必要があります
_[Route("rename")]
_
コントローラに適切なRoutePrefix("api/customer")
属性があることを確認してください。
2番目の問題は、複数の_[FromBody]
_パラメーターです。 ca n't bind multiple parametersエラーが発生します。制限があります-FromBodyとしてマークできるパラメーターは1つだけです。 Simple Simple Types の注を参照してください:
Web APIはリクエスト本文を最大で1回読み取るため、リクエスト本文から取得できるアクションのパラメーターは1つだけです。リクエストの本文から複数の値を取得する必要がある場合は、複合型を定義します。
すべてのパラメーターを保持する複合型を作成する必要があります
_public class RenameModel
{
public int UserId { get; set; }
public string Type { get; set; }
public string Title { get; set; }
}
_
そして、メソッドの署名を
_[HttpPost]
[Route("rename")]
public IHttpActionResult Rename(RenameModel model)
_
application/x-www-form-urlencodedとしてリクエストデータを送信します
[Route("rename/{userId}/{type}/{title}/")]
public IHttpActionResult Rename([FromBody] int userId, [FromBody] string type, [FromBody] string title)
最後の答えは正しいです。ルートでこれらのパラメーターを要求していますが、投稿の本文でそれらを期待していると言っています。また、通常、ルートは動詞ではなく名詞で始まります。名前を変更するのは何ですか? (つまり、[Route( "users/rename/{userId}/{type}/{title}")]
最初の投稿に基づいて、代わりにこれを試してください:
[HttpPost]
[Route("rename/{userId}/{type}/{title}" Name = "RenameUser"]
public IHttpActionResult Rename(int userId, string type, string title)
{
_myServiceMethod.Rename(userId, type, title);
return new StatusCodeResult(HttpStatusCode.Created, this);
}
または、本文に情報を含めて投稿する場合:データコントラクトを宣言します。
public class User
{
public string Type { get; set; }
public string Title { get; set; }
}
次に、エンドポイントで:
[HttpPost]
[Route("rename/{userId}", Name = "RenameUserPost")]
public IHttpActionResult RenameUserPost(int userId, [FromBody] User userData)
{
return new StatusCodeResult(HttpStatusCode.Created, this);
}
どちらの場合も、「this」はApiControllerから継承するコントローラークラスを指すことに注意してください。これらの両方をSwaggerで確認し、POSTを受け入れ、ステータスコードを返しました。
お役に立てれば。