フォーム送信?

  • タグ:
  • タグはありません
switch (contentType)
{
    case "application/x-www-form-urlencoded":
        if (parameters.Any(param => param.IsFile)) throw new ArgumentException("application/x-www-form-urlencodedでファイルを送ることはできません。");

        req.ContentType = "application/x-www-form-urlencoded";

        using (var sw = new StreamWriter(req.GetRequestStream()))
            sw.Write(string.Join("&", parameters.Select(data => Uri.EscapeDataString(data.Name) + "=" + Uri.EscapeDataString(data.Content))));

        break;
    case "multipart/form-data":
        var boundary = Guid.NewGuid().ToString();

        req.ContentType = "multipart/form-data; boundary=" + boundary;

        using (var stream = req.GetRequestStream())
        {
            foreach (var param in parameters)
            {
                stream.WriteText("--" + boundary + "\r\n");

                var contentDisposition = new List<string>();
                contentDisposition.Add("form-data");
                contentDisposition.Add(string.Format(@"name=""{0}""", param.Name));
                if (param.IsFile)
                    contentDisposition.Add(string.Format(@"filename=""{0}""", Path.GetFileName(param.Content)));
                stream.WriteText("Content-Disposition: " + string.Join("; ", contentDisposition));

                if (!string.IsNullOrEmpty(param.ContentType))
                    stream.WriteText("Content-Type: " + param.ContentType);

                stream.WriteText("\r\n\r\n");

                if (!param.IsFile)
                {
                    stream.WriteText(param.Content);
                }
                else
                {
                    stream.WriteAll(File.ReadAllBytes(param.Content));
                }

                stream.WriteText("\r\n");
            }

            stream.WriteText("--" + boundary + "--");
        }

        break;
}