3 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
1)如果您必須發(fā)送Content-Type: multipart/form-data
或只是form-data
這是tab
郵遞員的第一個(gè)
如果您只需要收集您發(fā)布的一個(gè)鍵/值對(duì) form-data
[HttpPost]
[Route("api/test")]
public HttpResponseMessage TestMethod(HttpRequestMessage request)
{
var testValue = HttpContext.Current.Request.Form["test"];
return Request.CreateResponse(HttpStatusCode.OK, testValue);
}
如果您必須收集多個(gè)已發(fā)布的鍵/值對(duì) form-data
[HttpPost]
[Route("api/test")]
public HttpResponseMessage TestMethod(HttpRequestMessage request)
{
NameValueCollection collection = HttpContext.Current.Request.Form;
var items = collection.AllKeys.SelectMany(collection.GetValues, (k, v) => new { key = k, value = v });
//We just collect your multiple form data key/value pair in this dictinary
//The following code will be replaced by yours
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
foreach (var item in items)
{
keyValuePairs.Add(item.key, item.value);
}
return Request.CreateResponse(HttpStatusCode.OK, keyValuePairs);
}
2)如果你必須發(fā)送 Content-Type: application/x-www-form-urlencoded
這是tab郵遞員的第二個(gè)
那么你的 API 將是
[HttpPost]
[Route("api/test")]
public async Task TestMethod(HttpRequestMessage request)
{
var test = await request.Content.ReadAsFormDataAsync();
}
然后當(dāng)您使用斷點(diǎn)調(diào)試代碼時(shí),您將獲得以下輸出
3)如果你必須發(fā)送 Content-Type: application/json
這是tab
郵遞員的第三個(gè)
有關(guān)此類選項(xiàng),請(qǐng)參見下面的屏幕截圖
你的api是
[HttpPost]
[Route("api/test")]
public async Task TestMethod(HttpRequestMessage request)
{
var jObject = await request.Content.ReadAsAsync<JObject>();
Item item = JsonConvert.DeserializeObject<Item>(jObject.ToString());
}
以及您收集這些發(fā)布數(shù)據(jù)的模型
public class Item
{
public string test { get; set; }
}
你的輸出將是
此選項(xiàng)的優(yōu)點(diǎn)是您可以將其complex type
作為發(fā)布的數(shù)據(jù)發(fā)送等
你的api是
[HttpPost]
[Route("test")]
public async Task TestMethod(HttpRequestMessage request)
{
var jObject = await request.Content.ReadAsAsync<JObject>();
Sample sample = JsonConvert.DeserializeObject<Sample>(jObject.ToString());
}
你收集這些數(shù)據(jù)的模型是
public class Item
{
public string test { get; set; }
}
public class Sample
{
public Item item { get; set; }
}
你會(huì)看到輸出是

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
從 Postman 發(fā)送并form-data選擇選項(xiàng)時(shí),以下代碼將正確讀取鍵/值
[HttpPost]
[Route("api/test")]
public async Task<HttpResponseMessage> TestMethod(HttpRequestMessage request)
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
var testValue = provider.FormData.GetValues("test")[0];
return Request.CreateResponse(HttpStatusCode.OK);
}
可以在此處找到更詳盡的示例(部分:閱讀表單控件數(shù)據(jù))。
編輯:發(fā)送到上述 API 處理程序的 HTTP 調(diào)用如下:
POST /api/stats/testmethod HTTP/1.1
Host: localhost:4100
Cache-Control: no-cache
Postman-Token: 999fd13d-f804-4a63-b4df-989b660bcbc5
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="test"
esad
------WebKitFormBoundary7MA4YWxkTrZu0gW--

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
下面的語句可以做到這一點(diǎn):
NameValueCollection form = HttpContext.Current.Request.Form;
- 3 回答
- 0 關(guān)注
- 283 瀏覽
添加回答
舉報(bào)