You can find some implementations of Web Api Post types here.
Model
public class Model
{
public string Name { get; set; }
public string Id { get; set; }
public string Save()
{
return "Saved";
}
}
1. Post Raw
Web Api
[HttpPost]
public async Task PostRaw()
{
string json = await Request.Content.ReadAsStringAsync();
Model model = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
return model.Save();
}
Request
POST http://localhost:63693/api/test/PostRaw HTTP/1.1
Content-Type: application/json
{"Id":"1","Name":"Model1"}
2. FromBody
Web Api
[HttpPost]
public string PostFromBody([FromBody]string body)
{
Model model = Newtonsoft.Json.JsonConvert.DeserializeObject(body);
return model.Save();
}
Request
Escape json: "{\"Id\":\"1\",\"Name\":\"Model1\"}"
POST http://localhost:63693/api/test/PostModel HTTP/1.1
Content-Type: application/json
"{\"Id\":\"1\",\"Name\":\"Model1\"}"
or
POST http://localhost:63693/api/test/PostFromBody HTTP/1.1
Content-Type: application/x-www-form-urlencoded
%7B%22body%22=%7B%22Id%22%3A%221%22%2C%22Name%22%3A%22Model1%22%7D%7D
3. Class parameter
Web Api
[HttpPost]
public string PostModel(Model model)
{
return model.Save();
}
Request
POST http://localhost:63693/api/test/PostModel HTTP/1.1
Content-Type: application/json
{"Id":"1","Name":"Model1"}
4. String parameter + Request.Content
Web Api
[HttpPost]
public string PostModelJson(string key)
{
//You may check key here...
var contentType = Request.Content.Headers.ContentType.MediaType;
var body = Request.Content.ReadAsStringAsync().Result;
Model model = null;
if (contentType == "application/json")
{
model = Newtonsoft.Json.JsonConvert.DeserializeObject(body);
return model.Save();
}
else
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
Request
POST http://localhost:63693/api/test/PostModelJson?key=1 HTTP/1.1
Content-Type: application/json
{"Id":"1","Name":"Model1"}
5. Post uri parameter
Web Api
[HttpPost]
public string PostModelFromUri([FromUri]Model model)
{
return model.Save();
}
Request
POST http://localhost:63693/api/test/PostModelFromUri?id=1&name=Model1 HTTP/1.1
6. Multipart Form Data
Web Api
[HttpPost]
public string PostMultipart()
{
var contentType = Request.Content.Headers.ContentType.MediaType;
if (contentType == "multipart/form-data")
{
var parts = Request.Content.ReadAsMultipartAsync().Result;
var contents = parts.Contents;
Model model = new Model();
foreach (StreamContent item in contents)
{
if (item.Headers.ContentDisposition.Name.Trim('"') == "Id")
model.Id = item.ReadAsStringAsync().Result;
else if (item.Headers.ContentDisposition.Name.Trim('"') == "Name")
model.Name = item.ReadAsStringAsync().Result;
}
return model.Save();
}
else
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
Request
POST http://localhost:63693/api/test/PostMultipart HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrKvJKnAHtuVvEERM
------WebKitFormBoundaryrKvJKnAHtuVvEERM
Content-Disposition: form-data; name="Id"
1
------WebKitFormBoundaryrKvJKnAHtuVvEERM
Content-Disposition: form-data; name="Name"
Model1
------WebKitFormBoundaryrKvJKnAHtuVvEERM--
0 comments:
Post a Comment