加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在asp.net核心中将字典发布到web api

发布时间:2020-12-15 23:35:03 所属栏目:百科 来源:网络整理
导读:我有使用Asp.Net Core开发的简单web api,我试图使用HttpClient发布键值对.我尝试了两种方法. 第一种方法 [Route("api/[controller]/[action]")]public class TransformationController : Controller{ private IServiceResolver _serviceResolver; public Tra
我有使用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();
    }

但我收到不支持的媒体类型错误

{StatusCode: 415,ReasonPhrase: ‘Unsupported Media Type’,Version:
1.1,Content: System.Net.Http.StreamContent,Headers: { Date: Mon,29 Aug 2016 19:44:44 GMT Server: Kestrel X-SourceFiles:
=?UTF-8?B?QzpccmVwb3NcY3ItbWV0YXRhc2tlclxzcmNcSW5ib3VuZEludGVncmF0aW9uXFRyYW5zZm9ybWF0aW9ucy5BcGlcYXBpXFRyYW5zZm9ybWF0aW9uXFRyYW5zZm9ybWF0aW9uMQ==?=
X-Powered-By: ASP.NET Content-Length: 0 }}

方法2
由于我无法在FormUrlEncodedContent中指定内容类型和编码,因此我更改了post方法的签名,现在它将Json字符串作为参数.想法是将字符串反序列化为字典.

[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
如果我使用POSTMAN发布数据然后它的工作.因此对于方法1,我可以将原始数据发布为

{
  "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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读