我正在使用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。
如果我将Web API签名更改为:
[HttpGet]
public IDictionary<string, string> Get(string myDictionaryAsParameter)
{
var dict = JsonConvert.DeserializeObject(myDictionaryAsParameter);
}
它被正确解析。
我应该如何编码/序列化我的字典对象以在url querystring中发送它并通过Web API方法签名正确解析?
答案 0 :(得分:1)
如果您使用:
[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版本。