【问题标题】:HTTP post xml data .net4 c#HTTP post xml数据.net4 c#
【发布时间】:2015-02-16 21:42:28
【问题描述】:

我正在尝试发布一个 xml 数据

目前我正在这样做。 requestXml 是 XmlDocument。

var connectionString = new Uri(SystemPropertyManager.Connexall_ConnectionString);

var request = (HttpWebRequest)WebRequest.Create(connectionString);
request.Timeout = 10000;
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml.ToString());
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 true;
}
return false;

为了测试这一点,我编写了一个 MVC 应用程序

// POST api/Contact
public SomeObject[] Post([FromBody]string message)
{
    return new SomeObject[];
}

我可以调用 post 方法,但消息始终为空。我究竟做错了什么。由于 mvc web api 应用程序只是一个测试应用程序,我无法在消息正文中添加消息标识符。

【问题讨论】:

    标签: .net xml c#-4.0


    【解决方案1】:

    此代码表示您希望接收序列化为 XML 或 JSON 的 .net String 对象。

    // POST api/Contact
    public SomeObject[] Post([FromBody]string message)
    {
        return new SomeObject[];
    }
    

    看起来像

    <string xmlns="...">some string</string>
    

    要将字符串读取为 XML,您可以这样做

    // POST api/Contact
    public SomeObject[] Post([FromBody]XElement message)
    {
        return new SomeObject[];
    }
    

    // POST api/Contact
    public async SomeObject[] Post()
    {
        string body = await Request.Content.ReadAsStringAsync();
        // Parse string to XML
        return new SomeObject[];
    }
    

    【讨论】:

    • 我试过这个 // POST api/Contact public SomeObject[] Post([FromBody]XElement message) { return new SomeObject[]; } 但这个请求一直给我 500 服务器错误。然后我尝试了public SomeObject[] Post([FromBody]XmlDocument message) { return new SomeObject[]; }这个请求中的message变量为null。然后我试了public void Post([FromBody]XmlDocument message) { var body = Request.Content.ReadAsStringAsync().Result; }body的值为“em.Xml.XmlDocument”
    • @neo 我刚刚在一个基于默认模板的新创建的 Web API 项目中使用 XElement 进行了尝试,它运行良好。您的 500 错误中有更多详细信息吗?
    • System.Net.WebException 被捕获 HResult=-2146233079 Message=远程服务器返回错误:(500) 内部服务器错误。
    • 没关系。这是我的错。我正在发送 XmlDocument.ToString() 我将其更改为 XmlDocument.InnerXml 并且它有效。
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多