Pass datetime from angular $http.get request to Web API 2 controller
Asked Answered
R

1

7

I have a web API 2 controller:

[HttpGet]
[Route("api/MyRoute/{date:datetime}")]
public IHttpActionResult Get(DateTime date)
{
    return Ok(date);
}

And an angular $http get call:

$http.get("/api/MyRoute/" + new Date());

This doesn't work, I get a 404 error.

I also get this error after the 404:

XMLHttpRequest cannot load http://localhost:2344/api/MyRoute/2017-06-28T00:00:00.000Z. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

But if I change the parameter to anything but a date it works.

I've tried new Date().toISOString() and that does that same.

So how do I pass a date from Angular to a Web API controller?

Ralline answered 28/6, 2017 at 11:12 Comment(2)
Just tried. Same result.Ralline
Try '$http.get("/api/MyRoute/" + encodeURIComponent(new Date()))' or '$http.get("/api/MyRoute/" + encodeURIComponent(new Date().toISOstring()))'Leftward
A
9

The problem seems to be with the datetime specification in the routing attribute. The solution was to just remove it and define the route as this

[HttpGet]
[Route("api/MyRoute")]
public IHttpActionResult Get(DateTime date)
{
    return Ok(date);
}

And then call the api from the client by

$http.get("/api/MyRoute?date=" + new Date().toISOString());
Alt answered 28/6, 2017 at 11:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.