You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Standard 2.0向.NET 4.5.1 API发送XmlDocument的接收方案求助

可行解决方案

方案1:直接发送XML作为请求主体(推荐)

跳过Multipart封装,直接把XML流作为POST请求的主体发送,接收端读取请求流解析,实现简单且高效。

发送端(.NET Standard 2.0)代码

// 确保XML流的位置在起始处
options.XmlStream.Seek(0, SeekOrigin.Begin);

var streamContent = new StreamContent(options.XmlStream);
// 设置正确的Content-Type
streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml");

var httpClient = new HttpClient();
var response = await httpClient.PostAsync("你的API地址", streamContent);
response.EnsureSuccessStatusCode();

接收端(.NET Framework 4.5.1 Web API)代码

using System.IO;
using System.Xml;
using System.Web.Http;

public class XmlController : ApiController
{
    [HttpPost]
    public IHttpActionResult ReceiveXml()
    {
        XmlDocument xmlDoc = new XmlDocument();
        // 直接读取请求输入流
        using (StreamReader reader = new StreamReader(Request.Content.ReadAsStreamAsync().Result))
        {
            string xmlContent = reader.ReadToEnd();
            xmlDoc.LoadXml(xmlContent);
        }

        // 在这里处理XmlDocument逻辑
        return Ok();
    }
}

方案2:保留MultipartFormDataContent,接收端用传统方式解析

如果必须用Multipart格式,接收端可以借助MultipartFormDataStreamProvider解析上传的文件,无需依赖IFormFile。

发送端代码(保持原有逻辑,注意修正流位置)

options.XmlStream.Seek(0, SeekOrigin.Begin);

var multipartContent = new MultipartFormDataContent
{
    { new StreamContent(options.XmlStream), "xmlFile", "request.xml" }
};

var httpClient = new HttpClient();
var response = await httpClient.PostAsync("你的API地址", multipartContent);
response.EnsureSuccessStatusCode();

接收端(.NET Framework 4.5.1 Web API)代码

using System.IO;
using System.Xml;
using System.Web.Http;
using System.Net.Http;

public class XmlController : ApiController
{
    [HttpPost]
    public async System.Threading.Tasks.Task<IHttpActionResult> ReceiveMultipartXml()
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            return BadRequest("请求不是Multipart格式");
        }

        // 使用临时目录存储上传的文件
        var tempDir = Path.GetTempPath();
        var provider = new MultipartFormDataStreamProvider(tempDir);

        await Request.Content.ReadAsMultipartAsync(provider);

        // 找到名为xmlFile的上传项
        var fileData = provider.FileData.FirstOrDefault(f => 
            f.Headers.ContentDisposition.Name.Equals("\"xmlFile\"", System.StringComparison.OrdinalIgnoreCase));
        
        if (fileData == null)
        {
            return BadRequest("未找到xmlFile参数");
        }

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(fileData.LocalFileName);

        // 处理XmlDocument逻辑

        // 清理临时文件
        File.Delete(fileData.LocalFileName);

        return Ok();
    }
}

关键注意事项

  • 发送前务必将XML流的Position重置到起始位置,否则接收端会读取到空内容。
  • 接收端如果是ASP.NET MVC控制器(而非Web API),可以直接使用HttpPostedFileBase作为方法参数来接收文件流,逻辑更简单:
    [HttpPost]
    public ActionResult ReceiveXml(HttpPostedFileBase xmlFile)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlFile.InputStream);
        // 处理逻辑
        return View();
    }
    

内容的提问来源于stack exchange,提问作者DValdir Martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:13:10