簡體   English   中英

如何在C#的multipart / form-data中使用HttpWebRequest多次發布相同的參數名稱?

[英]How can we post same parameter name multiple times using HttpWebRequest in multipart/form-data in C#?

[這里舉例]

我想多次發布相同的參數,但是在multipart / form-data中使用HttpWebRequest的值不同。

如果我多次發布相同的參數,那么它會覆蓋上一次的值,但是會發布一次。 誰能幫助我。 下面是我的HttpWebRequest代碼:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

var boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.KeepAlive = true;

Stream memStream = new System.IO.MemoryStream();

var endBoundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
                                                boundary + "--");

string formdataTemplate = "\r\n--" + boundary +
                "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";

if (data != null)
{
    foreach (string key in data.Keys)
    {
        string formitem = string.Empty;
        string[] values = data.GetValues(key);
        foreach (string value in values)
        {
            formitem = string.Format(formdataTemplate, key, value);
        }
        formitem = string.Format(formdataTemplate, key, key);
        byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
        memStream.Write(formitembytes, 0, formitembytes.Length);
    }
}

memStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
request.ContentLength = memStream.Length;

using (Stream requestStream = request.GetRequestStream())
{
    memStream.Position = 0;
    byte[] tempBuffer = new byte[memStream.Length];
    memStream.Read(tempBuffer, 0, tempBuffer.Length);
    memStream.Close();
    requestStream.Write(tempBuffer, 0, tempBuffer.Length);
} 

例

嘗試使用MultipartFormDataContent的此代碼。

我創建了一個簡單的輔助函數,該函數將參數添加到表單中。 在此示例中,它添加了兩個帶有兩個不同值的參數"name"

public static void PostSomething()
{
    var url = "http://localhost:5591/api/values";

    using (var client = new HttpClient())
    {
        using (var formData = new MultipartFormDataContent())
        {
            formData.Add(AddContentDispositionParam("name", "val1"));
            formData.Add(AddContentDispositionParam("name", "val2"));

            try
            {
                var response = client.PostAsync(url, formData).Result;
            }
            catch (Exception e)
            {
            }
        }
    }
}

public static StringContent AddContentDispositionParam(string name, string value)
{
    var stringContent = new StringContent(value, Encoding.UTF8);
    stringContent.Headers.Add("Content-Disposition", $"form-data; name=\"{name}\"");
    return stringContent;
}

在服務器代碼中,我具有ASP.NET Core 2.2 Post處理程序。

    [HttpPost]
    [AllowAnonymous]
    public void Post()
    {
        foreach (var formField in Request.Form)
        {
            // Form data 
            var values = formField.Value;

            foreach (var v in values)
            {

            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM