2016-08-17 70 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

相关问题