如何将DateTime值发布到Web API 2控制器

时间:2016-08-17 19:04:07

标签: asp.net json asp.net-mvc asp.net-web-api fiddler

我有一个示例控制器:

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [Route("Foo")]
    [HttpGet]
    public string Foo([FromUri] string startDate)
    {
        return "This is working";
    }

    [Route("Bar")]
    [HttpPost]
    public string Bar([FromBody] DateTime startDate)
    {
        return "This is not working";
    }
}

当我向http://localhost:53456/api/Example/Foo?startDate=2016-01-01发出GET请求时,它可以正常工作。

当我发布到http://localhost:53456/api/Example/Bar时,我收到HTTP/1.1 400 Bad Request错误。

这是我的POST数据:

{
"startDate":"2016-01-01T00:00:00.0000000-00:00"
}

我做错了什么?

3 个答案:

答案 0 :(得分:8)

您无法直接发布非对象,使用FromBody时需要将它们包装在对象容器中。

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [Route("Foo")]
    [HttpGet]
    public string Foo([FromUri] string startDate)
    {
        return "This is working";
    }

    [Route("Bar")]
    [HttpPost]
    public string Bar([FromBody] BarData data)
    {
        return "This is not working";
    }
}

public class BarData{
    public DateTime startDate {get;set;}
}

可以工作的另一种方式是,如果使用=符号对此值进行格式编码(请注意,您将其作为非对象发送,花括号已删除)。

"=2016-01-01T00:00:00.0000000-00:00"

答案 1 :(得分:4)

尝试发布:

{
  "2016-01-01T00:00:00.0000000-00:00"
}

指定属性名称意味着您的端点需要接受具有名为startDate的属性的对象。在这种情况下,您只想传递DateTime

答案 2 :(得分:0)

提交的日期格式很重要,具体取决于您的客户端库。它必须如下所示(原始有效载荷中的引号):

"2015-05-02T00:00:00"

没有大括号,没有属性名称。从您的代码和/或客户端库传输的格式将取决于您是否发送javascript日期或一个字符串表示。因此,适当调整提交代码......