是否可以使用相同路径的2种方法(GET和POST)?

Boo*_*ley 2 c# asp.net asp.net-mvc http asp.net-mvc-routing

我想在我的控制器中有两个方法具有相同的路由,但仅在HTTP方法上有所不同.具体来说,如果我的路线看起来像

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

我的控制器中有2个方法:

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

[HttpPost]
public void SetData(string user, string id)
Run Code Online (Sandbox Code Playgroud)

ViewData()如果我GET 则调用所需的行为Sample/a/b,SetData()如果我POST Sample/a/b,则调用相同的URL.

我知道我可以创建两条不同的路线,但出于设计原因,我希望只有一条路线可以区分GETPOST.有没有办法配置路由或控制器来执行此操作而无需创建新路由?

Nko*_*osi 6

使用属性路由,您应该能够使用不同的方法设置相同的路由.

[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) { ... }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记在基于约定的路由之前启用属性路由

routes.MapMvcAttributeRoutes();
Run Code Online (Sandbox Code Playgroud)

您应该编辑该SetData方法以从POST主体获取一些有效负载.

public void SetData(string user, string id, MyCustomObject data) { ... }
Run Code Online (Sandbox Code Playgroud)