c# – 在asp.net核心中将字典发布到web api
我有使用Asp.Net Core开发的简单web api,我试图使用HttpClient发布键值对.我尝试了两种方法.
第一种方法 [Route("api/[controller]/[action]")] public class TransformationController : Controller { private IServiceResolver _serviceResolver; public TransformationController(IServiceResolver serviceResolver) { _serviceResolver = serviceResolver; } [HttpPost] [ActionName("Post1")] public void Post1([FromBody]Dictionary<string,string> data) { // do something } } 然后我发布如下 [Fact] public void TestPost1() { var content = new Dictionary<string,string>(); content.Add("firstname","foo"); var httpContent = new FormUrlEncodedContent(content); var client = new HttpClient(); var result = client.PostAsync("http://localhost:17232/api/Transformation/Post1",httpContent).GetAwaiter().GetResult(); } 但我收到不支持的媒体类型错误
方法2 [HttpPost] [ActionName("Post2")] public void Post2([FromBody]string data) { var dictionary = JsonConvert.DeserializeObject<Dictionary<string,string>>(data); // do something here } 然后我发布如下字符串 [Fact] public void TestPost2() { var httpContent = new StringContent("{ "firstName": "foo" }",Encoding.UTF8,"application/json"); var client = new HttpClient(); var result = client.PostAsync("http://localhost:17232/api/Transformation/Post2",httpContent).GetAwaiter().GetResult(); } 但是当我调试测试时; Post2方法中的data参数为null. 我不确定这两种方法中我都缺少什么?有人可以请帮助 UPDATE1 { "firstname": "foo" } 和Approach2将原始数据发布为 "{"firstname": "foo"}" 当我使用HttpClient时,相同的数据是如何工作的 解决方法
尝试合并两种方法:
[Fact] public void TestPost3() { var httpContent = new StringContent("{ "firstName": "foo" }","application/json"); var client = new HttpClient(); var result = client.PostAsync("http://localhost:17232/api/Transformation/Post3",httpContent).GetAwaiter().GetResult(); } [HttpPost] [ActionName("Post3")] public void Post3([FromBody]IDictionary<string,string> data) { // do something } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |