複数のihttpactionResultsが単一のapicontroller内にgetのgetを失敗させます
-
21-12-2019 - |
質問
私はWebAPI2と遊んで、奇数の問題に出会いました。
ihttpactionResult
を使用するようにデフォルト値を更新しました。のように
public class ValuesController : ApiController
{
// GET api/values
[HttpGet]
public IHttpActionResult Get()
{
return Ok(new string[] { "value1", "value2" });
}
// GET api/values/get2
[HttpGet]
public IHttpActionResult Get2()
{
return Ok(new string[] { "value1", "value2" });
}
.
Postman内でget()を試してみたとき、私はエラーを取得します
{ 「メッセージ」:「エラーが発生しました」 "ExceptionMessage": "要求:\ r \ nsystem.web.http.ihttpactionResult get()webApplication1.Controllers.ValuesController \ R \ NSystem.Web.http.ihttpactionResult get2()on typactionResult get2()にある複数のアクションが見つかりました.controllers.valuesController "、 "exceptionType": "System.InvalidOperationException"、 System.Web.Http.Controllers.apicontrollerActionSelector.ActionAction(HTTPControlRercontext ControllerContext)\ R \ Nの "System.Web.http.Controllers.apicontrollerContext ControllerContext)\ r \ nシステムのselectaction(HTTPControlRercontext ControllerConterext)\ R \ n。 web.http.apicontroller.executeasync(HTTPControllerContext ControllerContext、CancellationToken CancellationToken)\ R \ N at system.web.http.dispatcherの\ r \ nで\ r \nr \ n。 HttpControlLerDispatcher.d__0.movenext()」 }
それぞれが機能するためにそれぞれのために手動でルートを作成する必要がありますか?
何かとてもシンプルなもの、まだ頭痛を引き起こします!
解決
あなたはあなたがパラメータを取らずに2つの取得要求を持っているので、WebAPIには2つの間の区別を区別していません。1つの方法は、あなたが言うように各方法に対してさまざまなルートを設定することです。これを回避する最も簡単な方法は、属性ルーティングライブラリを使用して、コントローラで異なるルートを定義することができます。アクションレベルは本当にこのようなものです。
[RoutePrefix("api/values")]
public class ValuesController : ApiController
{
[GET("Get")]
public IHttpActionResult Get()
{
return Ok(new string[] { "value1", "value2" });
}
[GET("Get2")]
public IHttpActionResult Get2()
{
return Ok(new string[] { "value1", "value2" });
}
}
.