反序列化字典 return Null

Deserializing dictionary return Null

我正在使用 Web API 并尝试接收字典作为参数:

[HttpGet]
public IDictionary<string, string> Get(IDictionary<string,string> myDictionaryAsParameter)

为了调用它,我正在创建一个 url 查询字符串:

string endpoint = "http//localhost:1122/api/MyController/?myDictionaryAsParameter=" + JsonConvert.SerializeObject(parameters)

调试代码时,web API 方法字典参数为Null。

如果我将网络 API 签名更改为:

[HttpGet]
public IDictionary<string, string> Get(string myDictionaryAsParameter)
{
    var dict = JsonConvert.DeserializeObject(myDictionaryAsParameter);
}

它被正确解析。

我应该如何 encode/serialize 我的字典对象将其发送到 url querystring 并通过网络 API 方法签名正确解析它?

如果您使用:

[HttpGet]
[Route("")]
public IDictionary<string, string> Get(IDictionary<string,string> myParameter)
{
}

那么您必须通过正文传递 myDictionaryAsParameter 并更改为 [HttpPost],因为 Web API 不支持 HttpGet 中的正文参数。

我尝试过的一些测试表明,只有简单的参数才能通过 URL 读取,例如

// For URL/value
// I've tried this with complex objects - doesn't work with complex objects

[HttpGet]
[Route("{myParameter}")]
public IDictionary<string, string> Get(string myParameter)
{
}

或:

// For URL?myParameter=value
// Haven't tried this with complex objects - might not work with complex objects

[HttpGet]
[Route("")]
public IDictionary<string, string> Get(string myParameter = "default")
{
}

但是,您可以尝试使用最后一个选项(通过添加默认值)。

此外,Web API 的 vNext 提供了额外的路由选项,您可以尝试使用 VS2015 和新的 Web API 版本。