Hin*_*man 4 c# asp.net form-data asp.net-web-api postman
我想收到邮递员的表格数据:
Content-Type: application/json
这是WebApi方法:
[HttpPost]
[Route("api/test")]
public async Task TestMethod(HttpRequestMessage request)
{
var test = await request.Content.ReadAsStringAsync();
}
Run Code Online (Sandbox Code Playgroud)
我得到的是:
------WebKitFormBoundarypqDvmeG89cBR9mK9
Content-Disposition: form-data; name="test"
esad
------WebKitFormBoundarypqDvmeG89cBR9mK9--
Run Code Online (Sandbox Code Playgroud)
但我不想要数据,WebKitFormBoundary我只限制使用formdata.还有其他方法吗?
HTTP呼叫信息:
POST /api/test HTTP/1.1
Host: localhost:16854
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Cache-Control: no-cache
Postman-Token: 1a3d6427-4956-707d-da0c-3a29a63c7563
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="test"
esad
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Run Code Online (Sandbox Code Playgroud)
卷曲呼叫信息:
curl -X POST \
http://localhost:16854/api/test \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-H 'postman-token: 02055873-e9a8-e9a6-019c-b407992b0e2f' \
-F test=esad
Run Code Online (Sandbox Code Playgroud)
er-*_*sho 11
1)如果你必须Content-Type: multipart/form-data简单地发送ORform-data
这是tabPostman 的第一个
如果您只需要收集已发布的一个键/值对 form-data
[HttpPost]
[Route("api/test")]
public HttpResponseMessage TestMethod(HttpRequestMessage request)
{
var testValue = HttpContext.Current.Request.Form["test"];
return Request.CreateResponse(HttpStatusCode.OK, testValue);
}
Run Code Online (Sandbox Code Playgroud)
如果您必须收集已发布的多个键/值对 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);
}
Run Code Online (Sandbox Code Playgroud)
2)如果你必须发送 Content-Type: application/x-www-form-urlencoded
这是tabPostman 的第二个
然后你的API将是
[HttpPost]
[Route("api/test")]
public async Task TestMethod(HttpRequestMessage request)
{
var test = await request.Content.ReadAsFormDataAsync();
}
Run Code Online (Sandbox Code Playgroud)
然后,当您使用断点调试代码时,您将获得以下输出
3)如果你必须发送 Content-Type: application/json
这是tab邮差的第三个
有关此选项,请参见下面的屏幕
你的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());
}
Run Code Online (Sandbox Code Playgroud)
而你的模型收集这个发布的数据
public class Item
{
public string test { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你的输出将是
这个选项的优点是你可以发送complex type作为发布数据等
你的api是
[HttpPost]
[Route("test")]
public async Task TestMethod(HttpRequestMessage request)
{
var jObject = await request.Content.ReadAsAsync<JObject>();
Sample sample = JsonConvert.DeserializeObject<Sample>(jObject.ToString());
}
Run Code Online (Sandbox Code Playgroud)
而你建模收集这些数据
public class Item
{
public string test { get; set; }
}
public class Sample
{
public Item item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你会看到输出是
| 归档时间: |
|
| 查看次数: |
8409 次 |
| 最近记录: |