【问题标题】:How to call API method that accepts XML in ASP.NET Core Web APIs?如何在 ASP.NET Core Web API 中调用接受 XML 的 API 方法?
【发布时间】:2020-11-21 04:38:04
【问题描述】:

我调用的 API 方法是:

[HttpPost("PostXml")]
[Consumes("application/xml")]
[Produces("application/xml")]
public Reservation PostXml([FromBody] Reservation res) =>
    repository.AddReservation(new Reservation
    {
        Name = res.Name,
        StartLocation = res.StartLocation,
        EndLocation = res.EndLocation
    });

客户端代码:

[HttpPost]
public async Task<IActionResult> AddReservationByXml(Reservation reservation)
{
    Reservation receivedReservation = new Reservation();
    
    using (var httpClient = new HttpClient())
    {
        StringContent content = new StringContent(ConvertObjectToXMLString(reservation), Encoding.UTF8, "application/xml");

        using (var response = await httpClient.PostAsync("http://localhost:8888/api/Reservation/PostXml", content))
        {
            string apiResponse = await response.Content.ReadAsStringAsync();
            receivedReservation = JsonConvert.DeserializeObject<Reservation>(apiResponse);
        }
    }
    return View(receivedReservation);
}

string ConvertObjectToXMLString(object classObject)
{
    string xmlString = null;
    XmlSerializer xmlSerializer = new XmlSerializer(classObject.GetType());
    using (MemoryStream memoryStream = new MemoryStream())
    {
        xmlSerializer.Serialize(memoryStream, classObject);
        memoryStream.Position = 0;
        xmlString = new StreamReader(memoryStream).ReadToEnd();
    }
    return xmlString;
}

我未能调用 API 方法并收到错误消息:

400一个或 更多验证错误 发生。https://tools.ietf.org/html/rfc7231#section-6.5.1|f5452728-4c49abe4d88e559e.1.8095e7c1_An 反序列化输入时发生错误 数据。

这里有什么问题?

【问题讨论】:

  • 查看 Reservation 类/结构定义,是否有任何字段/属性验证属性,限制域
  • 您确定,您的 api 方法正在返回 json 数据吗?

标签: api asp.net-core asp.net-core-webapi


【解决方案1】:

你从这行得到错误

    receivedReservation = JsonConvert.DeserializeObject<Reservation>(apiResponse);

请检查您的Reservation 模型的验证并详细说明您过去的values 以及你得到的错误content。

【讨论】:

  • 嗨,@yogihosting,如果您有关于这个问题的最新信息,请告诉我们。
【解决方案2】:

您的 XML 请求应与 c# 类一样使用正确的大小写。 XML 区分大小写。

试试这个代码。

        XmlSerializer xsSubmit = new XmlSerializer(typeof(Reservation));

        System.IO.StringWriter sww = new System.IO.StringWriter();
        XmlWriter writer = XmlWriter.Create(sww);
        xsSubmit.Serialize(writer, reservation);
        var xml = sww.ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2014-12-08
    相关资源
    最近更新 更多