2016-08-17 10 views
1

私は同じルートを持っているがHTTPメソッドでのみ異なる2つのメソッドをコントローラに持っていたいと思います。具体的には、私のルートは同じルートで2つの方法(GETとPOST)が可能ですか?

routes.MapRoute(
    name: "DataRoute", 
    url: "Sample/{user}/{id}/", 
    defaults: new { controller = "Sample", action = "--not sure--", user = "", id = "" } 
); 

のように見えると私のような私のコントローラ内の2つの方法がある場合:

[HttpGet] 
public void ViewData(string user, string id) 

[HttpPost] 
public void SetData(string user, string id) 

望ましい行動は、私がSample/a/bを取得し、私が投稿する場合SetData()を呼び出す場合ViewData()を呼び出すことですがSample/a/b、同じURL。

私はちょうど2つの別々の経路を作ることができますが、設計上の理由から、GETPOSTによって区別される1つの経路を持つことを望みます。新しいルートを作成せずにルートまたはコントローラのいずれかを設定する方法はありますか?

+0

短い答えはノーです。しかし、あなたはURLを介して投稿することはできません。あなたのやろうとしていることは不明です。 –

+0

属性ルーティングでは、異なる方法で同じルートを設定できる必要があります。 – Nkosi

答えて

5

属性ルーティングでは、異なる方法で同じルートを設定することができます。

[RoutePrefix("Sample")] 
public class SampleController : Controller { 
    //eg GET Sample/a/b 
    [HttpGet] 
    [Route("{user}/{id}")] 
    public void ViewData(string user, string id) { ... } 

    //eg POST Sample/a/b 
    [HttpPost] 
    [Route("{user}/{id}")] 
    public void SetData(string user, string id) { ... } 
} 

あなたはPOSTの本体からいくつかのペイロードを取るためにSetDataメソッドを編集する必要があり

routes.MapMvcAttributeRoutes(); 

規則ベースのルーティングの前にルーティング属性を有効にすることを忘れないでください。

public void SetData(string user, string id, MyCustomObject data) { ... } 
+0

ありがとう!私はこれを試してみる。しかし、コンベンションベースのルーティングでこれを行う方法はありませんか? – Booley

関連する問題