【问题标题】:How to pass xml input (request) to Web api on .net core 3.1如何将xml输入(请求)传递给.net core 3.1上的Web api
【发布时间】:2020-05-03 17:11:02
【问题描述】:

我有一个 .net core 3.1 web api。我已经尝试了以下方法,但是当它碰到它时它总是显示为空

[HttpPost]     
    public IActionResult ReturnXmlDocument(HttpRequestMessage request)
    {
        var doc = new XmlDocument();
        doc.Load(request.Content.ReadAsStreamAsync().Result);        
        return Ok(doc.DocumentElement.OuterXml.ToString());
    }

它甚至在调试过程中也没有命中它,它还在 fiddler 中显示 415 错误。

【问题讨论】:

  • 我尝试传递内容类型并接受标头作为 XML 无济于事

标签: xml asp.net-core fiddler webapi


【解决方案1】:

Asp.net 核心不再使用 HttpRequestMessage 或 HttpResponseMessage。

所以,如果你想接受一个xml格式的请求,你应该做以下步骤:

1.安装 Microsoft.AspNetCore.Mvc.Formatters.Xml NuGet 包。

2.在 Startup.ConfigureServices 中调用 AddXmlSerializerFormatters

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers()
            .AddXmlSerializerFormatters(); 
    }

3. 将 Consumes 属性应用于请求正文中应包含 XML 的控制器类或操作方法。

 [HttpPost]
    [Consumes("application/xml")]
    public IActionResult Post(Model model)
    {
        return Ok();
    }

更多详情可以参考Model binding的官方文档

【讨论】:

  • 您的解决方案有效..thnaks....我想知道另外我不想声明模型,或者当我想直接将输入保存在字符串或 XMLDocument 中时。有可能吗
  • 感谢您的回答,我注意到即使没有 [Consumes("application/xml")] 属性它也可以工作。
  • 注意不要使用 services.AddControllers().AddXmlDataContractSerializerFormatters(),只使用 services.AddControllers().AddXmlSerializerFormatters()
猜你喜欢
  • 1970-01-01
  • 2020-09-10
  • 2015-05-28
  • 1970-01-01
  • 2020-12-15
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多