【发布时间】:2021-11-05 07:13:34
【问题描述】:
我正在尝试创建一个将 XML 作为输入的 Web API。 问题是请求被编码为 ISO-8859-1。
起初我尝试只使用XmlDocument 参数,但是当编码错误时它给出了500 错误:
[HttpPost]
public IActionResult XmlEndpoint([FromBody] XmlDocument requestXmlBody)
接下来我尝试自己解析它,但这从未正确关闭请求,并导致 HTTP 客户端在 XML 格式错误时永远连接。
[HttpPost]
public async Task<IActionResult> XmlEndpoint()
{
using var stringReader = new StreamReader(Request.Body, dataEncodingFromByteOrderMarks: true))
var body = await stringReader.ReadToEndAsync();
var requestXmlBody = new XmlDocument();
requestXmlBody.LoadXml(body);
之后我尝试部分使用 ASP.NET Core 功能,但是当使用 ISO-8599-1 时,这会给出Unsupported Media Type:
[HttpPost]
public async Task<IActionResult> XmlEndpoint([FromBody] string content)
{
var requestXmlBody = new XmlDocument();
requestXmlBody.LoadXml(content);
这是我用来测试的命令:
curl -XPOST 'https://localhost/api/XmlEndpoint' --data "<broken</broken>" -H "Content-Type: application/xml;charset=iso-8859-1"
如何从ISO-8859-1 编码请求中获取XMLDocument?
【问题讨论】:
-
为什么不在 StreamReader 中指定
System.Text.Encoding.Latin1?这种“从未正确关闭请求”不应该发生,你可能只是在你的控制器中有一个错误。 -
@DavidBrowne-Microsoft
System.Text.Encoding.Latin1在我能找到的任何地方都不存在,但我确实找到了Encoding.GetEncoding("ISO-8859-1")。感谢您暗示不是此代码而是其他代码,我写了一个答案来解决我的问题。
标签: c# asp.net-core-webapi streamreader xmldocument iso-8859-1