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));
        }
    }

FromUri 属性不适用于字符串/对象字典

如果您的

网址如下所示,这将起作用:

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