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.JsonSerializer
。 ISerializer
实现(可以用来覆盖默认的序列化)声明它们自己的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