在asp.net core中将字典发布到web api

2024-04-28

我有使用开发的简单 Web apiAsp.Net Core我正在尝试使用 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();
    }

但我越来越Unsupported Media Type error

{StatusCode:415,ReasonPhrase:“不支持的媒体类型”,版本: 1.1,内容:System.Net.Http.StreamContent,标头:{ 日期:2016 年 8 月 29 日星期一 19:44:44 GMT 服务器:Kestrel X-SourceFiles: =?UTF-8?B?QzpccmVwb3NcY3ItbWV0YXRhc2tlclxzcmNcSW5ib3VuZEludGVncmF0aW9uXFRyYW5zZm9ybWF0aW9ucy5BcGlcYXBpXFRyYW5zZm9ybWF0aW9uXFryYW5zZm9ybWF0aW9uMQ ==?= X-Powered-By: ASP.NET 内容长度: 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();
    }

但是当我调试测试时;这dataPost2 方法中的参数为 null。

我不确定这两种方法都缺少什么?有人可以帮忙吗

Update1
如果我使用 POSTMAN 来发布数据,那么它就可以工作。因此,对于方法 1,我可以将原始数据发布为

{
  "firstname": "foo"
}

Approach2 将原始数据发布为

 "{\"firstname\": \"foo\"}"

然而,当我使用 HttpClient 时,相同的数据不起作用


尝试合并两种方法:

[Fact]
public void TestPost3()
{   
    var httpContent = new StringContent("{ \"firstName\": \"foo\" }", Encoding.UTF8, "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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在asp.net core中将字典发布到web api 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit

随机推荐

  • 尝试使用 Redshift SQL 对累积不同实体进行计数

    我正在尝试获取某个时间序列中 Redshift 中不同对象的累积计数 最简单的事情就是使用COUNT DISTINCT myfield OVER ORDER BY timefield DESC ROWS UNBOUNDED PRECEDIN
  • 我怎样才能残酷无情地中止 Java 中的任务?

    我用 Java 编写了一个数独求解器作为作业 目前我正在尝试找出它可能面临的有问题的输入 以使其变得更好 我已经生成了几千个数独网格David Bau 的数独生成器 http davidbau com archives 2006 09 04
  • WEKA 的重采样过滤器 - 如何解释结果

    我目前正在努力解决机器学习问题 而我必须处理大量不平衡的数据集 也就是说 有六个类 1 2 6 不幸的是有例如对于 1 类 有 150 个示例 实例 对于 2 有 90 个实例 对于 3 类 只有 20 个实例 所有其他类都无法 训练 因为
  • 优化 Web 应用程序开发策略

    如今 许多网络应用程序正在使用它们自己无法使用的 API 或代码 并且通常使用效率低下 我想到了一些谷歌地图混搭 对于 php asp 后端 HTML javascript 尤其是现在所有的 AJAX 存在许多潜在的瓶颈 问题 低效率和双重
  • 直接将函数与匿名函数传递给 then Promise 回调

    我试图理解这三个选项之间的区别 then myCallback then myCallback then gt myCallback The myCallback函数不返回任何内容 仅用于其副作用 因此我不需要它将任何内容传递回承诺链 我不
  • Magento:两种基于重量的统一运费

    尝试按如下方式设置我的运费 如果购物车总重量低于 1 公斤 则运费为 3 68 英镑 如果购物车总重量超过 1 公斤 则运费为 6 68 英镑 如果购物车总价超过 100 英镑 则免运费 我设法使用 6 68 英镑的统一费率将所有这些结合在
  • 如何获取带有完整月份名称的完整日期,例如 2015 年 11 月 2 日

    我想将完整月份的日期加载到文本框中 这意味着用户每次想要在文本框中保存日期时都会获得当前日期和时间 他们不会写任何东西 这是我想要的格式 2015 年 11 月 2 日 但没有得到我想要的结果 我得到了这个结果 DD NOV 2015 但这
  • 滚动播放 Html5 视频

    我正在一个 WordPress 网站上工作 下面的代码可以按照我想要的方式工作 只播放一次 最后出现 重播 按钮 我希望它在滚动到 ie 时开始播放 在视口中 我在这里看到了几种不同的方法来实现这一点 但我无法让它们与我当前的代码很好地配合
  • Android 上的查询何时返回 Null?

    我似乎没有找到任何有关查询 插入或任何其他返回 null 的 SQL 方法的信息 但如果发生错误 它就会发生 我只是想知道游标为空是否意味着发生了错误 或者是否意味着没有选择任何行 例如 我不知道应该如何对待它 作为一个错误或可能不时发生的
  • Ajax 成功时强制下载 .mp3 或 .zip 文件

    用户填写电子邮件验证表单 通过 AJAX 提交 后 如果 AJAX 调用响应成功 我想强制在当前浏览器窗口中开始下载 电子邮件验证表单如下所示
  • 如何将 const unordered_map 中的值分配给另一个 const 变量 - C++ [重复]

    这个问题在这里已经有答案了 include
  • 当您在 iPad 上的 Safari 浏览器中触摸 HTML 元素时,它会变成灰色。决定嵌套元素中哪个元素显示为灰色的逻辑是什么?

    当您触摸 iPad 上网页中的某个元素 例如编辑框 时 它会在您触摸时变成灰色 我有一张由浮动 div 包裹的桌子 当触摸数据元素时 整个表 或其包装 div 不会变灰 而不是单个数据元素或行变灰 该表的功能是自动补全弹窗 在网站的其他地方
  • 使用Java Compiler API编译多个java文件

    您好 我需要创建 编译和加载 java 类运行时 使用 FTL 我正在创建 java 源文件 并且如果没有动态依赖项 则能够编译源代码 为了详细说明一个实例 我有两个java源文件 一个接口及其实现类 我可以使用 java 编译器 api
  • 正则表达式删除外括号

    我一直在用这个 s s 正则表达式使用 PHP preg replace 函数删除外括号 在我上一个问题中了解更多信息正则表达式匹配除尾随空格之外的任何字符 https stackoverflow com questions 1076569
  • 通过标签收集自定义帖子类型

    我使用以下代码设置了名为 扇区 的自定义帖子类型 register post type sectors array labels gt array name gt Sectors singular name gt sectors has a
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • 如何获取 NSURLConnection 中的默认用户代理字符串?

    我想将文本附加到默认的用户代理标头NSURLConnection 我知道怎么做更改 NSURLConnection 的用户代理 https stackoverflow com questions 1532206 changing the u
  • Pymongo 仅以列表形式返回值

    以下 pymongo 查询为我提供了我需要的所有值 l list db rounds find current strategy PPStrategy4016 myFundsChange 1 id 0 myFundsChange 0 300
  • DataRow(数据表)中的链接

    我正在动态构建一个数据表 并尝试在要添加到数据表的数据行中添加一个 链接 DataTable 在创建后绑定到 GridView 像这样的东西 DataTable dataTable new DataTable foreach Item it
  • 在asp.net core中将字典发布到web api

    我有使用开发的简单 Web apiAsp Net Core我正在尝试使用 HttpClient 发布键值对 我尝试了两种方法 第一种方法 Route api controller action public class Transforma