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

boi*_*222 0 c# xml asp.net 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;
}
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:58069/api/values/SendEmail?orderID=1234&internalUse=true&subject=Hello&message=Hello World
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:58069/api/values/SendEmail
Run Code Online (Sandbox Code Playgroud)

并且参数将在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>
Run Code Online (Sandbox Code Playgroud)

以下是Postman中请求的外观:

在此输入图像描述

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

Ale*_*rov 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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

添加支持XmlSerializer:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddXmlSerializerFormatters();
}
Run Code Online (Sandbox Code Playgroud)

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