【问题标题】:How to send XML file in C#?如何在 C# 中发送 XML 文件?
【发布时间】:2021-04-09 21:27:39
【问题描述】:

我想将 XML 文件发送到特定网站,但有一些棘手的事情,我无法用 HttpWebResponse 类解决。

文档给了我一个基本的 html 表单(我想转换成 C# 代码):

<html>
  <head><meta content="text/html; CHARSET=UTF-8"></head>
    <body>
      <form action="https://www.targetsite/" method="post" enctype="multipart/form-data">
        XML file: <input type="file" name="action-xmlgenerate"><br><br>
        <input type="submit" name="generate" value="Generate">
      </form>
    </body>
</html>

文档还告诉我们:

请求必须是“multiform/form-data”类型,并且必须包含一个名为 action-xmlgenerate 的文件

我不想从计算机上传 XML 文件,我必须在代码中生成 XML 文件并且它必须有一个特定的名称:action-xmlgenerate

我试过了:

Xml 类:

[XmlRoot(ElementName = "seller")]
public class Seller
{
    [XmlElement(ElementName = "bank")]
    public string Bank { get; set; }
    [XmlElement(ElementName = "creditCardNumber")]
    public string CreditCardNumber { get; set; }
    [XmlElement(ElementName = "emailReplyto")]
    public string EmailReplyto { get; set; }
    [XmlElement(ElementName = "emailSubject")]
    public string EmailSubject { get; set; }
    [XmlElement(ElementName = "emailText")]
    public string EmailText { get; set; }
}

通讯功能:

public void sendXml()
{
    Seller seller = new Seller();
    seller.Bank = "asd";
    seller.CreditCardNumber = "1234";
    seller.EmailReplyto = "a@a.a";
    seller.EmailSubject = "asd";
    seller.EmailText = "asdasd";

    var xmlFile = seller;

    byte[] bytes;
    bytes = Encoding.ASCII.GetBytes(xmlFile.ToString());

    string boundary = $"---------------------------{DateTime.Now.Ticks.ToString("x")}";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://targetsite/");
    request.ContentType = "multipart/form-data";
    request.Method = "POST";
    request.KeepAlive = true;
    request.Credentials = CredentialCache.DefaultCredentials;

    request.Headers.Add("name=\"action-xmlgenerate\"");
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(bytes, 0, bytes.Length);
    requestStream.Close();
    HttpWebResponse response;
    response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    {
        Stream responseStream = response.GetResponseStream();
        string responseStr = new StreamReader(responseStream).ReadToEnd();
    }
}
        

有什么解决办法?

【问题讨论】:

  • 您遇到了什么问题?
  • 它不会将我的请求发送到正确的端点。我认为我犯了一些小错误。
  • 这可能是您正在寻找的答案stackoverflow.com/a/19983672/5417823
  • @BusinessMan 这条线是做什么的:var xmlFile = Seller;?你是说var xmlFile = seller; 吗?
  • @PeterCsala 是的,我在这里粘贴不正确。

标签: c# xml api httpwebrequest


【解决方案1】:

我想,我已经找到了类似的堆栈溢出解决方案。 请检查绿色打勾的答案,HTTP post XML data in C#

为了您的帮助,我从这些链接中粘贴了代码:

public string ToXML(Seller obj)//object to XML link: https://stackoverflow.com/questions/11447529/convert-an-object-to-an-xml-string
{
    using (var stringwriter = new System.IO.StringWriter())
    {
        var serializer = new XmlSerializer(obj.GetType());
        serializer.Serialize(stringwriter, this);
        return stringwriter.ToString();
    }
}

public string sendXml(string destinationUrl, string requestXml)// link: https://stackoverflow.com/questions/17535872/http-post-xml-data-in-c-sharp
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
    byte[] bytes;
    bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
    request.ContentType = "text/xml; encoding='utf-8'";
    request.ContentLength = bytes.Length;
    request.Method = "POST";
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(bytes, 0, bytes.Length);
    requestStream.Close();
    HttpWebResponse response;
    response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    {
        Stream responseStream = response.GetResponseStream();
        string responseStr = new StreamReader(responseStream).ReadToEnd();
        return responseStr;
    }
    return null;
}

【讨论】:

  • 不幸的是它不起作用:ContentType 必须是“multipart/form-data”,在这段代码中我可以在哪里指定该信息:
猜你喜欢
  • 2014-11-20
  • 1970-01-01
  • 2014-03-22
  • 2019-12-08
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2021-12-31
  • 2013-09-04
相关资源
最近更新 更多