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请求?
创建模型以反映您的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.