【问题标题】:How do I get my API request to use XML instead of parameters?如何让我的 API 请求使用 XML 而不是参数?
【发布时间】:2018-05-29 21:07:49
【问题描述】:

我在 C# 中创建了一个接受 4 个参数的 API。这工作正常。我需要做什么才能让它接受 XML 文件而不是参数?

代码如下:

public string Post(int orderID, bool internalUse, string subject, string message)
{
    return "orderID: " + orderID + "; internalUse: " + internalUse + "; subject: " + subject + "; message: " + message;
}

我可以使用这样的 Post 请求从 Postman 调用它:

http://localhost:58069/api/values/SendEmail?orderID=1234&internalUse=true&subject=Hello&message=Hello World

我宁愿使用 URL 如下所示的 XML 文档:

http://localhost:58069/api/values/SendEmail

并且参数将在 XML 文件中指定。

我尝试使用此 XML 文件(也尝试使用 & 不使用嵌套在响应标记中的参数,使用 & 不使用 XML 版本标记):

<?xml version="1.0" encoding="utf-8" ?>
<response>
    <orderID>1234</orderID>
    <internalUse>true</internalUse>
    <subject>Hello</subject>
    <message>Hello World</message>
</response>

Postman 中的请求如下所示:

这符合我的SendEmail 方法,但所有变量都是空白的。我需要在代码方面做些什么,还是我没有正确创建 Postman 请求?

【问题讨论】:

标签: c# asp.net xml rest post


【解决方案1】:

创建模型以反映您的 xml:

[XmlRoot("response")]
public class Response
{
    [XmlElement("orderID")]
    public int OrderID { get; set; }
    [XmlElement("internalUse")]
    public bool InternalUse { get; set; }
    [XmlElement("subject")]
    public string Subject { get; set; }
    [XmlElement("message")]
    public string Message { get; set; }
}

更改方法签名。使用FromBody 属性。

public string Post([FromBody] Response response)
{
    return "orderID: " + response.OrderID +
        "; internalUse: " + response.InternalUse +
        "; subject: " + response.Subject +
        "; message: " + response.Message;
}

添加对XmlSerializer的支持:

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

我假设您使用的是 ASP.NET Core。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多