2016-08-17 95 views
1

我想在我的控制器有兩個方法具有相同的路由,但只有HTTP方法不同。特別是,如果我的路線看起來像是否有可能有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) 

期望的行爲是調用ViewData()如果我得到Sample/a/b並呼籲SetData()如果我張貼到Sample/a/b,相同的網址。

我知道我可以創建2條單獨的路線,但出於設計原因,我希望只有一條路線只通過GETPOST來區分。有沒有辦法配置路線或控制器來做到這一點,而不必創建一個新的路線?

+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) { ... } 
} 

不要忘記啓用屬性路由以公約爲基礎的路線

routes.MapMvcAttributeRoutes(); 

之前,您應該編輯SetData方法採取一些有效載荷從POST體。

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

謝謝!我會試試這個。儘管如此,是否沒有辦法通過基於約定的路由來實現這一點? – Booley

相關問題