【问题标题】:FromUri attribute not working for string/object dictionaryFromUri 属性不适用于字符串/对象字典
【发布时间】:2014-12-07 03:37:23
【问题描述】:

我有一个试图获取字符串/对象字典的 Web 服务控制器。我认为由于它可以将相关对象(DateTime)隐式转换为字符串,因此我不必使用 [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));
        }
    }

【问题讨论】:

  • - 为什么你的查询字符串有空格? - 你用什么将你的数据编码成查询字符串? - 如果您可以向我们展示会有所帮助的 Web API 控制器。
  • 感谢您指出空格。我添加了控制器。

标签: c# asp.net-web-api


【解决方案1】:

如果您的网址看起来像这样,这将起作用:

http://localhost/api/Controller/MethodName/?parametersDictionary[0].Key=StartDate&parametersDictionary[0].value=20141201T0003Z&parametersDictionary[1].Key=EndDate&parametersDictionary[1].Value=20141207T0003Z

您会注意到传递的日期格式不同。那是因为您的示例 Uri 中的斜杠是不允许的(因为斜杠被用作路线的一部分)。

我还建议您更改完全使用从 Uri 读取的字典的策略。它有点难看,如果你只是接受一定数量的参数(即只是开始和结束日期),那么我会定义一个明确接受它们的路线。它在 Uri 中看起来不那么糟糕,并且代码更容易处理。我假设您提供的示例是您要实现的目标的简化版本,但即便如此,如果您知道要采用的所有可能值,请定义它们。示例:

public HttpResponseMessage Get([FromUri]DateTime startDate, [FromUri]DateTime endDate)

然后调用

http://localhost/api/Controller/MethodName/?startDate=20141201T0003Z&endDate=20141207T0003Z

【讨论】:

猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多