Parsing “multipart/form-data” in .NET/C#

Posted on

Problem :

Got a .NET/C# question…

I need to parse some input post data thats in a “multipart/form-data” format to extract the passed username and password. Anyone know how to do this without writing my own parsing code?

Note the input post data looks something like this:

Content-Disposition: form-data; name="username"
Content-Disposition: form-data; name="password"


To demostrate my code looks something like this at the moment:

[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();

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

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

Solution :

Marc’s got it. The easiest way to use the ASP.NET compatibility requirements mode is to apply the AspNetCompatibilityRequirementsMode attribute on your operation. Then you have access to the HttpContext form params. Here’s how you’d go about it:

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

Could you not post to a regular ASP.NET page (perhaps an ashx/handler, or MVC) and just use Request.Form? This supports multi-part.

Leave a Reply

Your email address will not be published. Required fields are marked *