【问题标题】:Post XML return "405 Unsupported Media Type"发布 XML 返回“405 不支持的媒体类型”
【发布时间】:2019-11-26 22:09:45
【问题描述】:

我正在开发一个 Web API 来上传 XML 文件,但是当我尝试将 XML 文件发送到路由时,我收到以下错误:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",
    "title": "Unsupported Media Type",
    "status": 415,
    "traceId": "80000018-0000-ff00-b63f-84710c7967bb"
}

我正在从 Postman 进行测试,我的控制器具有以下功能:

namespace NFEApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UploadController : ControllerBase
    {
        // POST api/upload
        [HttpPost]
        public string Post([FromBody] XmlElement request)
        {
            return request.OuterXml;
        }
    }
}

添加到标题“Content-Type: application/xml”,以“二进制”形式发送 XML 文件,以“原始”形式发送 XML 文本,类型为“XML (application/xml)” e 没有任何作用。我该如何继续?

【问题讨论】:

    标签: c# xml asp.net-core .net-core


    【解决方案1】:

    您需要在 ConfigureServices 中添加AddXmlSerializerFormatters(),如下所示,您可以将对象序列化到 XML 或从 XML 序列化对象:

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().AddXmlSerializerFormatters().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
    

    更多xml文件上传方法可以参考here

    【讨论】:

      【解决方案2】:

      如果您将 XML 作为原始文本发布在正文中,只需在 API 方法中使用一个字符串作为参数。

      namespace NFEApi.Controllers
      {
          [Route("api/[controller]")]
          [ApiController]
          public class UploadController : ControllerBase
          {
              // POST api/upload
              [HttpPost]
              public string Post([FromBody] string xml)
              {
                  return xml;
              }
          }
      }
      

      另一种方法是在您的 API 方法中使用 IFormCollection 作为参数,并将表单作为 multipart/form-data 发送。

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 1970-01-01
        • 2016-09-05
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 2016-11-26
        • 2012-06-20
        • 2018-10-13
        相关资源
        最近更新 更多