如何让我的API请求使用XML而不是参数?

时间:2018-05-29 21:07:50

标签: c# asp.net xml rest post

我在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

我宁愿使用XML文档,其中URL如下所示:

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中的显示方式:

enter image description here

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

1 个答案:

答案 0 :(得分:5)

创建模型以反映您的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。