Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从控制器访问RESTful URL上的参数?_C#_Httprequest_Restful Url_Asp.net Web Api Routing_Controller Actions - Fatal编程技术网

C# 如何从控制器访问RESTful URL上的参数?

C# 如何从控制器访问RESTful URL上的参数?,c#,httprequest,restful-url,asp.net-web-api-routing,controller-actions,C#,Httprequest,Restful Url,Asp.net Web Api Routing,Controller Actions,我问了一个初步的、有点类似的问题 现在我需要知道如何从控制器方法/操作中的RESTful URL中访问这些值 我有一个名为PlatypusController的控制器,其路由在WebApiConfig中设置如下: config.Routes.MapHttpRoute( name: "ReportsApi", routeTemplate: "api/{controller}/{unit}/{begindate}/{enddate}", defaults: new { end

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

现在我需要知道如何从控制器方法/操作中的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; 
}
当然,“inti=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);
}
[RoutePrefix("api/platypus")]
public class PlatypusController: ApiController
{
     [Route("{unit}/{begindate}")]
     [HttpPost]
     public void Post(string unit, string begindate)
     {
         int i = 2; 
     }
}

…或者是否有其他方法获取它们,例如从HttpRequest对象或其他什么东西获取它们?

它与3.14一样简单;这很管用:

public void Post(string unit, string begindate)
{
    string _unit = unit;
    string _begindate = begindate;
}
_使用以下URL,单位为“gramps”,单位为“201509”:

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

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

它就像3.14一样简单;这很管用:

public void Post(string unit, string begindate)
{
    string _unit = unit;
    string _begindate = begindate;
}
_使用以下URL,单位为“gramps”,单位为“201509”:

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

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

尝试添加Post方法[FromBody]

public void Post([FromBody] string unit, [FromBody] string begindate)
{
    DoSomething_Anything(unit, begindate);
}
有关详细示例,请勾选此项:

尝试添加Post方法[FromBody]

public void Post([FromBody] string unit, [FromBody] string begindate)
{
    DoSomething_Anything(unit, begindate);
}
有关详细示例,请勾选此项:

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

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

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

config.MapHttpAttributeRoutes();
在WebApiConfig文件中

然后你可以这样做:

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

要调用此方法,请向:/api/platypus/gramps/201509发出POST请求。我个人更喜欢在定义路由时明确显示,这就是为什么我建议使用属性路由而不是基于约定的路由

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

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

config.MapHttpAttributeRoutes();
在WebApiConfig文件中

然后你可以这样做:

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

要调用此方法,请对:/api/platypus/gramps/201509执行POST请求。如果使用[FromBody],则不会在OP请求时从URI读取数据。如果我错了,请纠正我。至少,[FromBody]是不必要的,因为没有它,我的简单示例就可以正常工作。如果使用[FromBody],则不会在OP请求时从URI读取数据。如果我错了,请纠正我。至少,[FromBody]是不必要的,因为我的简单化示例没有它也可以工作。这就像是帮派杀手;我在《邮递员》中确实获得了“204无内容”的状态,但我认为这并不重要,因为我并不期望任何内容回来。我只是想知道为什么它会告诉我这一点。这不就像说,“今天亚利桑那州没下雨”(我没想到会下雨)。很高兴它能起作用:-)。当您有一个不返回任何内容(void)的操作时,WebAPI“framework”默认返回“204 No Content”。根据规范,这是一条路要走。它基本上与“200OK”相同,但它也明确地告诉客户机没有数据。也就是说,“请求成功了,但我不会向您返回任何数据”;我在《邮递员》中确实获得了“204无内容”的状态,但我认为这并不重要,因为我并不期望任何内容回来。我只是想知道为什么它会告诉我这一点。这不就像说,“今天亚利桑那州没下雨”(我没想到会下雨)。很高兴它能起作用:-)。当您有一个不返回任何内容(void)的操作时,WebAPI“framework”默认返回“204 No Content”。根据规范,这是一条路要走。它基本上与“200OK”相同,但它也明确地告诉客户机没有数据。也就是说,“请求成功,但我不会向您返回任何数据”。