gpt4 book ai didi

c# - 使用 C# 在 HttpPost 中接收 XML

转载 作者:可可西里 更新时间:2023-11-01 16:59:21 24 4
gpt4 key购买 nike

我认为这会很容易,但事实并非如此 - 至少对我而言。我正在尝试将 XML 字符串发送到 REST 端点。此时,端点唯一要做的就是将 XML 记录到文件或数据库中。 XML 本身是未知的,它实际上可以是任意长度并且具有任意数量的节点。所以它确实需要被视为一个字符串。

我的问题是我无法确定如何在 Post 方法中接收 XML/字符串。我正在使用 RestSharp 库。

这是我正在使用的 Post 方法;很简单。我删除了日志记录代码和 try/catch 代码以保持简单。

[HttpPost]
public IHttpActionResult Post([FromBody] string status)
{
// Log the post into the DB
LogPost(status);
}

执行帖子的代码:

public void TestPost()
{
IRestResponse response;
try
{
// Get the base url for
var url = @"http://blahblah/status";
// Create the XML content
object xmlContent = "<XML><test><name>Mark</name></test></XML>";
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
// Add required headers
request.AddHeader("Content-Type", "text/plain");
request.AddHeader("cache-control", "no-cache");
request.AddJsonBody(xmlContent);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
response = client.Execute(request);
}
catch (Exception ex)
{
...
}
}

问题:帖子收到的状态参数很简单,就是“Mark”。缺少完整的 XML!我需要整个 XML 字符串。

我尝试了几种不同的变体。将内容类型更改为“application/xml”、“application/json”等。没有任何效果。

我尝试过使用 request.AddXmlBody(statusObject) 和 request.AddBody(statusObject)。两者均未成功。

我什至尝试过使用 request.AddHeader() 发送 XML,但没有成功。我错过了什么。肯定有一些明显的东西我没有得到。

最佳答案

a) 您必须在 WebApiConfig.Register 中配置 Web API 以使用 XmlSerializer。否则 Web API 默认使用 DataContractSerializer。

文件:App_Start\WebApiConfig.cs

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
config.MapHttpAttributeRoutes();

config.Formatters.XmlFormatter.UseXmlSerializer = true; //HERE!
...
}

b) 你需要为你的xml定义一个类

    public class test { public string name { get; set; } } //BASED ON YOUR XML NODE

[HttpPost]
public IHttpActionResult Post([FromBody] string status)
{

}

c) 如果您需要使用简单的字符串,请更改 POST 方法

    public void Post(HttpRequestMessage request)
{
string body = request.Content.ReadAsStringAsync().Result;

}

d) 从 restsharp 客户端调用

            string xmlContent = "<test><name>Mark</name></test>"; 
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddParameter("application/xml", xmlContent, ParameterType.RequestBody);
var response = client.Execute(request);

出于“某些”原因,request.AddParameter 将第一个参数作为 ContentType(不是名称) https://github.com/restsharp/RestSharp/issues/901

关于c# - 使用 C# 在 HttpPost 中接收 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50413967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com