通过C#IHttpHandler访问多部分HTTP请求主体

时间:2014-10-30 16:27:35

标签: c# .net http multipart ihttphandler

这应该是如此简单,我觉得我只是缺少一些东西。我是这个应用程序的HTTP方面的新手,所以我也觉得我在黑暗中拍摄。

我们正在进行B2B EDI。我们将收到多部分POST请求。每个部分都是XML。我需要提取每个部分并将每个部分转换为XmlDocument。

这是我写的。

using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;

namespace Acme.B2B
{
    public class MultipleAttachments : IHttpHandler
    {
        #region IHttpHandler Members

        public bool IsReusable { get { return true; } }

        public void ProcessRequest(HttpContext context)
        {
            var ds = extractDocuments(context.Request);

            return; // Written for debugging only.
        }

        #endregion

        #region Helper Members

        private IEnumerable<XmlDocument> extractDocuments(HttpRequest r)
        {
            // These are here for debugging only.
            var n = r.ContentLength;
            var t = r.ContentType;
            var e = r.ContentEncoding;

            foreach (var f in r.Files)
                yield return (XmlDocument)f;
        }

        #endregion
    }
}

我非常有信心(XmlDocument)f无法工作,但我仍然在探索。奇怪的是,在var n = r.ContentLength;上设置一个断点,代码永远不会达到那个断点。它只是达到我在无关return;上设置的断点。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您需要使用HttpPostedFile.InputStream并将其传递给XDocument构造函数:

foreach (HttpPostedFile postedFile in r.Files)
{
    yield return XDocument.Load(postedFile.InputStream);
}

或者如果你想要XmlDocument

foreach (HttpPostedFile postedFile in r.Files)
{
    yield return new XmlDocument().Load(postedFile.InputStream);
}