Разбор "multipart / form-data" в .NET / C # - PullRequest
7 голосов
/ 11 ноября 2009

Есть вопрос .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
}

Ответы [ 2 ]

7 голосов
/ 12 ноября 2009

Марк понял. Самый простой способ использовать режим требований совместимости 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 голосов
/ 11 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...