2016-04-13 8 views
1

これは私にとってとてもシンプルなようでしたが、私はボートを紛失しています。MVC 6 Web APIの重複httpアクション(投稿)

私は2つの異なるタイプのPOSTアクションを処理する1つのコントローラを持っています。

[HttpPost("")] 
public JsonResult Post([FromBody]Category mdl) 
{ ... snip... } 


[HttpPost("")] 
public JsonResult Post([FromBody]SubCategory mdl) 
{ ... snip... } 

唯一の違いは、署名のオブジェクトパラメータです。最初は、MVCが差別化できるとは思っていましたが、失敗しました。どちらか一方がコメントアウトされていればコメントアウトされています。

[HttpPost(Name = "UpdateCat")] 
public JsonResult Post([FromBody]Category mdl) 
{ ... snip... } 


[HttpPost(Name = "UpdateSubCat")] 
public JsonResult Post([FromBody]SubCategory mdl) 
{ ... snip... } 

しかし、これはどちらか任意の違いはありませんでした: OKので、私はこれを試してみましたか?だから、私はグーグルで始めて、これに遭遇しましたが、これは同じ名前を持つ異なるhttpアクションであるため、私が後にしていることではありません。

Is it possible to have duplicate action names and parameter list for post and get?

私は別のポストアクションの取り扱いについて何を誤解していますか?

+0

いずれかの方法の名前を変更できない特別な理由はありますか? –

+0

No..私はこれが私にとって学術的なベンチャーであることを明確にすべきです。名前を変更した場合、どのようにapi urlが変更されますか?私が現在localhost/api/testに投稿しているとすれば、localhost/api/test/renamedpostmethodでしょうか? – GPGVM

+0

サブカテゴリはカテゴリに関連付けられていますか? – Nkosi

答えて

2

同じWeb APIコントローラで2つのPOSTメソッドを使用する場合は、Route属性を使用して2番目のPOSTメソッドに特定のルートパターンを定義できます。

public class CategoryController: Controller 
{ 
    [HttpPost] 
    public HttpResponseMessage Post([FromBody]Category mdl) 
    { 
     return Request.CreateResponse(HttpStatusCode.OK, mdl); 
    } 
    [HttpPost] 
    [Route("~/api/products/SaveSubCat")] 
    public HttpResponseMessage Post([FromBody]SubCategory mdl) 
    { 
     return Request.CreateResponse(HttpStatusCode.OK, mdl); 
    } 
} 

今、あなたの要求は、最初のアクションメソッドをヒットするとapi/producs/savesucatは二番目にヒットする

api/products/異なるものになります。

2番目のアクションをSubCategoryコントローラに移動し、そのデフォルトのPOSTメソッドを使用することをお勧めします。

+0

あなたの理論は健全です。 OPの 'HttpPost(string)'属性に基づいて、私はOPがMVC6を参照しており、あなたの答えはWebApi2。*に関係していると考えています。 – Nkosi

+0

はい。私はmvc6の部分を見逃した。私は更新します。 – Shyju

+2

@Shyju ...あなたは右と右です。私はルートを変更し、コントローラで2つのポストを達成することができます...しかし、あなたはより多くのスポットです...それは本当に別のコントローラにあるべきです。ありがとうございました。 – GPGVM

関連する問題