我有一个试图获取字符串/对象字典的Web服务控制器。我认为,因为它可以隐式地将有问题的对象(DateTime)转换为字符串,所以我不必使用[FromUri]属性,但是当我对其进行调试时,它是null。所以我在那里扔了一个[FromUri],它有一本字典,但它是空的。 uri看起来像这样:
http://localhost:2806/api/Controller/MethodName?@StartDate=11/1/14&@EndDate=12/1/14
有人能看到明显的问题吗?如果更多情况有帮助,请告诉我。
我的控制器看起来像这样:
[HttpGet]
public HttpResponseMessage MethodName([FromUri]Dictionary<string, object> parametersDictionary)
{
try
{
var messages = DbBuisnessLogic.GetDataFromDb(parametersDictionary);
var json = JsonConvert.SerializeObject(messages);
return Request.CreateResponse(HttpStatusCode.OK, json);
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError(e.Message));
}
}
答案 0 :(得分:1)
如果您的网址如下所示,则会有效:
http://localhost/api/Controller/MethodName/?parametersDictionary[0].Key=StartDate¶metersDictionary[0].value=20141201T0003Z¶metersDictionary[1].Key=EndDate¶metersDictionary[1].Value=20141207T0003Z
您会注意到传递的日期格式不同。这是因为不允许使用示例Uri中的斜杠(因为斜杠用作路径的一部分)。
我还建议改变你完全使用从Uri读取字典的策略。它有点难看,如果你只是接受一定数量的参数(即只是开始和结束日期),那么我只定义一条明确接受它们的路线。它在Uri中看起来不那么糟糕,代码更易于处理。我假设您提供的示例是您尝试实现的简化版本,但即便如此,如果您知道要接受的所有可能值,请定义它们。例如:
public HttpResponseMessage Get([FromUri]DateTime startDate, [FromUri]DateTime endDate)
然后致电
http://localhost/api/Controller/MethodName/?startDate=20141201T0003Z&endDate=20141207T0003Z