Разбор "multipart/form-data" в .NET/С#

Получил вопрос .NET/С#...

Мне нужно проанализировать некоторые данные входных данных, которые находятся в формате "multipart/form-data", чтобы извлечь переданное имя пользователя и пароль. Кто-нибудь знает, как это сделать, не написав свой собственный синтаксический код?

Обратите внимание, что данные входных данных выглядят примерно так:

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

[email protected]
---------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
}

Ответ 1

Марк получил это. Самый простой способ использования режима требований совместимости ASP.NET - применить атрибут AspNetCompatibilityRequirementsMode для вашей операции. Затем у вас есть доступ к параметрам формы HttpContext . Вот как вы это сделаете:
        [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"];
        }

Ответ 2

Не могли бы вы отправить сообщение на обычную страницу ASP.NET(возможно, ashx/handler или MVC) и просто использовать Request.Form? Это поддерживает многочастную часть.