FromUri 属性不适用于字符串/对象字典
本文关键字:对象字典 字符串 适用于 属性 不适用 FromUri | 更新日期: 2023-09-27 18:33:26
我有一个试图获取字符串/对象字典的Web服务控制器。我认为由于它可以隐式地将有问题的对象(日期时间)转换为字符串,因此我不必使用 [FromUri] 属性,但是当我调试它时,它是空的。所以我在那里放了一个[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));
}
}
如果您的
网址如下所示,这将起作用:
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