问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webapi读取json webapi读取json时,获取的数据为空(webhook)

发布网友 发布时间:2022-05-10 21:23

我来回答

1个回答

热心网友 时间:2023-11-02 02:10

 转载 在使用Web Api的时候,有时候只想返回JSON;实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法。

  JSON in Web API – the formatter based approach

  只支持JSON最普遍的做法是:首先清除其他所有的formatters,然后只保留JsonMediaTypeFormatter。

  有了HttpConfiguration的实例,你将会很简单的清除所有formatters,然后重新添加JsonMediaTypeFormatter。

  实现代码如下:

  configuration.Formatters.Clear();
  configuration.Formatters.Add(new JsonMediaTypeFormatter());这种方式虽然可以实现功能,但是所有的conent negotiation还是会发生,这就会产生以下额外的开销了。因为,你已经知道要返回的结果了,也只想返回Json,其他的content negotiation都不需要了。

  下面的方法可以很好的解决这个问题。

  

  JSON in Web API – the conneg based approach

  最好的方法是使用自定义的只返回Json Result的content negotiation代替Web Api中默认的content negotiation。

  Conneg通过实现IContentNegotiator的Negotiator方法实现扩展。Negotiator方法返回ContentNegotiationResult(它包装了你选择的headers和formatter)。

  下面的方法通过传递一个JsonMediaTypeFormatter给自定义的conneg negotiator,让它一直返回applicaton/json 的content-type以及JsonMediaTypeFormatter。这种方法避免了每次请求都要重新创建一次formatter。

  代码如下:

  public class JsonContentNegotiator : IContentNegotiator
  {
  private readonly JsonMediaTypeFormatter _jsonFormatter;

  public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
  {
  _jsonFormatter = formatter;
  }

  public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
  {
  var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
  return result;
  }
  }接下来,你需要在HttpConfiguration实例上注册你的新的实现机制:

  

  var jsonFormatter = new JsonMediaTypeFormatter();
  //optional: set serializer settings here
  config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

  通过替换默认的DefaultContentNegotiator,我们使用我们自定义的JsonContentNegotiator,它只支持Json,而且可以马上返回。

  如果你想更深入的了解Content Negotiation的知识,你可以查看作者的这篇文章。

  总结

  通过使用自定义的JsonContentNegotiator替换系统默认的DefaultContentNegotiator,很好的实现Web Api只返回Json的功能,而且没有额外的开销。追问我刚接触json 1个星期,这个很专业的回答我还看不懂,能不能再说通俗一点?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在excel中输入产品序号如何直接引出相应的信息 excel表格输序号自动出现内容 戏剧教育主要学什么内容 戏剧教育专业就业前景和就业方向怎么样 戏剧教育专业学什么 2025就业前景怎么样 戏剧教育学什么 戏剧教育专业是本科还是专科 戏剧教育专业要读多少年 戏剧教育是什么专业 贵州省合医在浙江省能直接报销吗 啤酒只能用巴氏杀菌吗 webapi同时支持get和post 怎么接受多个参数 包装及杀菌方式对豆奶产品的保质期有何影响? c#webapi接收中文怎么编码 我是熟肉加工者,除了杀菌锅以外还有什么方法杀菌呢? 饮料重复杀菌风味变化 c#mvc中的webapi怎么迫使服务端返回字符串 长时间保存牛奶需要什么杀菌方式? 巴氏消毒法对卤鸡爪进行二次灭菌会影响他的口味吗? 牛奶能用巴氏消毒机二次杀菌吗 普联wdr 7400这个型号路由器有百兆的端口和千兆端口,两者区别大吗? 找好听的昵称。 90后 。求 360清理了“qq账户保护功能组件”之后,qq号被盗了好几次,这有影响么? 90后 求好听英文名一个 谢谢 90后女生啥名字最好听? 帮我取一个90后好听的QQ网名…嘿嘿 姓孟,90后好听名字 根据生辰八字,90后卢姓属马的女生,怎样起名才更具内涵又好听?【1990年农历四月初一18:00左右出生】 给我CF取个好听的90后男生的名字,叫某某先森的,最好加点符号,一定要好听的,某某先森。求求求!! 90后男生的时尚名字 好听 印象深刻 要新颖点的 怎么获取post页面webapi 如何在webapi中使用filter 荣耀60无法安装伊利软件 在外地怎么申请离婚 在外地如何申请离婚 微信实名更改后用别的身份证号实名还是同一个吗? 如果微信换了一个身份证的另一个身份证里的游戏数据会不会丢失? 一个身份证注册了两个微信如果另一个重新注册一个身份证那么另外一个会不会改变? 微信注册临时身份证会影响身份证原件的使用吗? 更换别人的身份证号跟银行卡会导 致原持卡人清除吗? 在同一部手机上怎么注册另一个? 如何在手机上申请第二个 如何申请第二个? 怎样用手机注册另一个? 怎样用手机申请 一个手机号怎么申请第二个? 光学作图软件都有哪些 光学工程的图像处理方向要熟练掌握什么软件的 光学图像处理的实质是什么 OCR(光学字符识别)软件在哪里