如何从Controller访问RESTful URL上的args?

时间:2015-12-29 22:36:39

标签: c# httprequest restful-url asp.net-web-api-routing controller-actions

我问了一个初步的,有点类似的问题here

现在我需要知道如何从Controller方法/操作中的RESTful URL中访问值。

我有一个名为PlatypusController的控制器,其路由在WebApiConfig中设置如下:

config.Routes.MapHttpRoute(
    name: "ReportsApi",
    routeTemplate: "api/{controller}/{unit}/{begindate}/{enddate}",
    defaults: new { enddate = RouteParameter.Optional }
);

PlatypusController.cs有以下代码:

public void Post()
{
    int i = 2; 
}

当然,“int i = 2”是无稽之谈;我只是把它放在那里,所以我可以在方法中放置一个断点来验证它是否已达到。当我选择“POST”并在Postman中输入此URL时:

http://localhost:52194/api/Platypus/gramps/201509

(当我打电话给这个时,应用程序在端口52194上运行)

但要完成一些有价值的事情,我需要URL中的“gramps”和“201509”。我怎样才能访问这些?我是否需要将它们添加到Post方法中,如下所示:

public void Post(string unit, string begindate)
{
    DoSomething_Anything(unit, begindate);
}

...还是有其他方式来获取它们,例如来自HttpRequest对象还是什么?

3 个答案:

答案 0 :(得分:3)

我个人更喜欢在定义路线时明确,这就是为什么我建议使用属性路由而不是基于约定的路由。

这样,您就可以显式配置每个控制器和操作的路由。

不要在WebApiConfig中以这种方式配置路由,只需通过调用此行确保已初始化属性路由:

config.MapHttpAttributeRoutes();
WebApiConfig文件中的

然后你可以这样做:

[RoutePrefix("api/platypus")]
public class PlatypusController: ApiController
{
     [Route("{unit}/{begindate}")]
     [HttpPost]
     public void Post(string unit, string begindate)
     {
         int i = 2; 
     }
}

要调用此方法,请执行POST请求:/ api / platypus / gramps / 201509

答案 1 :(得分:1)

尝试添加Post方法[FromBody]

public void Post([FromBody] string unit, [FromBody] string begindate)
{
    DoSomething_Anything(unit, begindate);
}

检查以获取详细示例: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

答案 2 :(得分:0)

就像3.14一样简单;这只是花花公子:

public void Post(string unit, string begindate)
{
    string _unit = unit;
    string _begindate = begindate;
}

_unit是“ gramps ”而_begindate是“ 201509 ”使用此网址:

http://localhost:52194/api/Platypus/gramps/201509

......所以这正是我需要的。