Csharp/C#教程:RestSharp是否覆盖手动设置Content-Type?分享


RestSharp是否覆盖手动设置Content-Type?

我正在创建一个RestSharp.RestRequest:

RestRequest request = new RestRequest(); request.Method = Method.POST; request.Resource = "/rest-uri"; request.AddHeader("Content-Type", "application/someContentType"); string xml = "" + Environment.NewLine + "" + Environment.NewLine + " " + Environment.NewLine + ""); request.AddParameter("text/xml", registerSinkRequest, ParameterType.RequestBody); 

(Content-Type手动设置为application/someContentType

在调试模式下,它还显示Content-Type=application/someContentType

但是执行RestRequest会返回415 Media Not Supported -Error并且WireShark显示Media-Type设置为text/xml (如AddParameter-Method中的set)。

为什么RestSharp显示与WireShark不同的Content-Type? 如何防止更改Content-Type(如果是)?

svick的评论是对的。 在AddParameter()的第一个参数中设置内容类型,您可以省略AddHeader()调用。

虽然这是’正确’的答案,但我会解释为什么它有一个令人困惑的方法来做这个并不是很明显。

实现此目的的方法是使用AddBody()RestRequest.RequestFormat 。 一个例子:

 var client = new RestClient(); // client.XmlSerializer = new XmlSerializer(); // default // client.XmlSerializer = new SuperXmlSerializer(); // can override with any implementaiton of ISerializer var request = new RestRequest(); request.RequestFormat = DataFormat.Xml; request.AddBody(objectToSerialize); 

objectToSerialize的序列化基于已注册的XmlSerializer 。 如果使用RequestFormat = DataFormat.Json ,则使用RestClient.JsonSerializerISerializer实现(可以用来覆盖默认的序列化)声明它们自己的Content-Types,它是通过你正在使用的janky AddParameter()重载传递的。

AddParameter(contentType, content, ParameterType.RequestBody)从未打算直接调用。 它被添加为一种解决方法,以传递来自AddBody()数据,但随后其他东西变得依赖于它,所以它陷入困境。 事后看来这是一个糟糕的决定,但是在1xx版本中改变它已经太迟了。 如果我构建另一个版本,我会更明显。

设置正文内容时,可以更改Content-Type。 Body的NAME参数设置Content-Type。

上述就是C#学习教程:RestSharp是否覆盖手动设置Content-Type?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 oRequest.Parameters.Add(new Parameter() { Name = "application/json;charset=UTF-8", Type = ParameterType.RequestBody, Value = sBody }); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1031295.html

(0)
上一篇 2022年1月13日
下一篇 2022年1月13日

精彩推荐