【问题标题】:Parsing "multipart/form-data" in .NET/C#在 .NET/C# 中解析“multipart/form-data”
【发布时间】:2009-11-11 17:43:02
【问题描述】:

有一个 .NET/C# 问题...

我需要解析一些“multipart/form-data”格式的输入帖子数据,以提取传递的用户名和密码。任何人都知道如何在不编写我自己的解析代码的情况下做到这一点?

注意输入的帖子数据如下所示:

---------1075d313df8d4e1d
Content-Disposition: form-data; name="username"

x@y.com
---------1075d313df8d4e1d
Content-Disposition: form-data; name="password"

somepassword
---------1075d313df8d4e1d--

为了演示我的代码目前看起来像这样:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Login", BodyStyle = WebMessageBodyStyle.Bare)]
public Stream Login(Stream input)
{
    string username = String.Empty;
    string password = String.Empty;

    StreamReader sr = new StreamReader(input);
    string strInput = sr.ReadToEnd();
    sr.Dispose();

    // Help needed here:
    usermame = ?.Parse(strINput, "username");
    password = ?.Parse(strINput, "password");

    // blah blah blah return login XML response as a Stream
}

【问题讨论】:

标签: c# .net html


【解决方案1】:

马克明白了。使用 ASP.NET 兼容性要求模式的最简单方法是对您的操作应用 AspNetCompatibilityRequirementsMode 属性。然后您可以访问HttpContext form params。以下是你的做法:

        [OperationContract]
        [WebInvoke(Method = "POST", 
                    UriTemplate = "Login", 
                    BodyStyle = WebMessageBodyStyle.Bare)]
        [AspNetCompatibilityRequirements(RequirementsMode = 
                    AspNetCompatibilityRequirementsMode.Required)]
        public Stream Login(Stream input)
        {
            string username = HttpContext.Current.Request.Params["username"];
            string password = HttpContext.Current.Request.Params["password"];
        }

【讨论】:

  • 感谢您的回复。我确实设法让 AspNetCompatibility 模式工作,所以这是一个可行的解决方案。但是,这不适用于我的单元测试,因为我在代码中启动了我的服务实例,并且您无法在代码中设置 AspNetCompatibility 模式(据我所知),请参见此处:stackoverflow.com/questions/1721219 所以最后我刚刚使用 RegEx 编写了一个自定义解析器。不是我最初想做的,因为它不是最优雅的解决方案,但它可以完成工作。
【解决方案2】:

您不能发布到常规的 ASP.NET 页面(可能是 ashx/handler 或 MVC)而只使用 Request.Form 吗?这支持多部分。

【讨论】:

  • 不,这是针对 RESTful 服务的,因此不可能使用 ASPX/ASHX/MVC。
  • 在这种情况下,ASP.NET 兼容模式是否可以选择,并使用 HttpContext.Current.Request?
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多