Parsing "multipart / form-data" in.NET/C#

Got a .NET/c# question...

je dois analyser quelques données POST entrées thats dans un format" multipart/form-data " pour extraire le nom d'utilisateur passé et le mot de passe. Quelqu'un sait comment faire cela sans écrire mon propre code d'analyse?

notez que les données POST input ressemblent à quelque chose comme ceci:

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

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

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

pour démostrer mon code ressemble à quelque chose comme ça en ce moment:

[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
}
7
demandé sur yfeldblum 2009-11-11 20:43:02

2 réponses

C'est Marc qui l'a. La façon la plus facile d'utiliser le ASP.NET le mode des exigences de compatibilité doit appliquer L'attribut AspNetCompatibilityRequirementsMode à votre opération. Vous avez ensuite accès au formulaire HttpContext params . Voici comment vous vous y prendriez:

        [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"];
        }
7
répondu Mike Atlas 2009-11-12 00:03:02

ne pouvez-vous pas poster à un régulier ASP.NET page (peut-être un ashx/handler, ou MVC) et juste utiliser Request.Form ? Cela prend en charge multi-part.

2
répondu Marc Gravell 2009-11-11 17:46:30