反序列化字典 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 版本。
我正在使用 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 版本。