Web API 接口返回值解析

  • void无返回值的:在请求该方法时,返回值为空,状态吗为204
1 [HttpPost]
2 public void SaveOrder(ORDER name){
3     //处理业务逻辑
4 }
  • 返回值为IHttpActionResult类型
 1 private readonly ORDER oRDER1 = new ORDER() { ID = "aa", NO = "10", NAME = "bb", DESC = "0" };
 2 private readonly ORDER oRDER2 = new ORDER() { ID = "dd", NO = "20", NAME = "cc", DESC = "1" };
 3 //StatusCode:返回带有提供的HTTP码(和一个空响应体)的响应
 4 public IHttpActionResult GetStatusCode(){
 5     return StatusCode(HttpStatusCode.OK);
 6 }
 7 //Json:返回HTTP 200(OK),将提供内容格式化为JSON格式,还可以使用提供的序列化器设置和字符编码来格式化内容
 8 public IHttpActionResult GetJsonResult(int id){
 9     switch (id){
10         case 1: return Json<List<ORDER>>(new List<ORDER> { oRDER1,oRDER2 }, new JsonSerializerSettings(), System.Text.Encoding.UTF8);
11         case 2: return Json<object>(new { A = "aa", B = "bb" }, new JsonSerializerSettings(), System.Text.Encoding.UTF8);
12         default: return Json<dynamic>(new { A = "aa", B = "bb" }, new JsonSerializerSettings(), System.Text.Encoding.UTF8);
13     }
14 }
15 // Ok:返回HTTP 200,可以包括返回的内容
16 public IHttpActionResult GetOKResult(int id){
17     switch (id){
18         case 1: return Ok<string>("aaaa");//简化return Ok("aaaa");
19         case 2: return Ok<ORDER>(oRDER1);//return Ok(oRDER1);
20         default: return Ok();
21     }
22 }
23 //Content:返回HTTP 200,返回内容,内容格式可以选定返回的内容,HTTP状态码,格式
24 public IHttpActionResult GetContent(){
25     return Content(HttpStatusCode.OK, oRDER1, new JsonMediaTypeFormatter(), new MediaTypeHeaderValue("application/json"));
26 }
27 //Created:返回HTTP 201,位置头被设,为提供URL的位置
28 public IHttpActionResult GetCreated(){
29     return Created("ActionApi", new { controller = "TestReturnData", action = "GetBadRequest" });
30 }
31 //CreateAtRoute:返回HTTP 201,位置头被设为基于提供的路由名和路由值构成的URL
32 public IHttpActionResult GetCreatedAtRoute(){
33     return CreatedAtRoute<ORDER>("ActionApi", new { controller = "TestReturnData", action = "GetBadRequest" }, oRDER1);
34 }
35 //Redirect:返回HTTP 302,位置头被设为指定的URL位置,重定向
36 public IHttpActionResult GetRedirectResult(int id){
37     if (id == 1){
38         return Redirect("http://localhost:61218/actionapi/TestReturnData/GetContent");
39     }else{
40         UrlHelper helper = new UrlHelper(Request);
41         IDictionary<string, object> route = new Dictionary<string, object>{
42             ["controller"] = "TestReturnData",["action"] = "GetBadRequest"
43         };
44         return Redirect(new Uri(helper.Link("ActionApi", route)));
45     }
46 }
47 //RedirectToRoute:返回HTTP302,位置头被设为基于提供的路由名和路由值构成的URL,重定向
48 public IHttpActionResult GetRedirectToRoute(){
49     return RedirectToRoute("ActionApi", new { controller = "TestReturnData", action = "GetBadRequest" });
50 }
51 //BadRequest:返回HTTP 400,根据验证错误,可能包含一条信息或者一个自动格式化的错误类
52 public IHttpActionResult GetBadRequest(){
53     return BadRequest("error");//也可以不包括错误信息
54 }
55 //Unauthorized:返回HTTP 401,身份验证头被设为提供的身份验证头值
56 public IHttpActionResult GetUnauthorized(){
57     return Unauthorized(new List<AuthenticationHeaderValue>() { new AuthenticationHeaderValue("Authorization") });
58 }
59 //NotFound:返回HTTP 404 没有找到
60 public IHttpActionResult GetNotFoundResult(){
61     return NotFound();
62 }
63 // Conflict:返回HTTP 409 冲突
64 public IHttpActionResult GetConflict(){
65     return Conflict();
66 }
67 //InternalServerError:返回HTTP 500,可能会包含提供的异常派生出的内容
68 public IHttpActionResult GetInternalServerError(){
69     //return InternalServerError();
70     return InternalServerError(new NotImplementedException());
71 }
  • 自定义类实现IHttpActionResult接口,该接口只有ExecuteAsync()方法
 1 //实现接口
 2 public class PageResult : IHttpActionResult{
 3     private object _value;
 4     private HttpRequestMessage _requestMessage;
 5     public PageResult(object value,HttpRequestMessage requestMessage){
 6         _value = value;
 7         _requestMessage = requestMessage;
 8     }
 9     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken){
10         var response = new HttpResponseMessage(){
11             Content = new ObjectContent(typeof(object), _value, new JsonMediaTypeFormatter()),
12             RequestMessage = _requestMessage
13         };
14         return Task.FromResult(response);
15     }
16 }
17 //调用
18 public IHttpActionResult GetPageResult(){
19     return new PageResult(new List<ORDER>() { oRDER1, oRDER2 }, Request);
20 }
  • ResponseMessageResult同样继承于IHttpActionResult接口,HttpResponseMessage类中有HTTP状态码,HTTP响应消息Content(有很多派生类,比如StreamContent、StringContent、ByteArrayContent等),头信息,一般用于文本流
 1 public IHttpActionResult GetRequestMessage(){
 2     return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK));
 3 }
 4 public HttpResponseMessage GetFile(){
 5     string json = JsonConvert.SerializeObject(new List<ORDER>() { oRDER1, oRDER2 });
 6     var buffer = Encoding.UTF8.GetBytes(json);
 7     MemoryStream stream = new MemoryStream(buffer);
 8     HttpResponseMessage responseMessage = new HttpResponseMessage(HttpStatusCode.OK){
 9         Content = new StreamContent(stream)
10     };
11     responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
12     responseMessage.Content.Headers.Add("Content-Disposition", "attachment;filename=figure.txt");
13     return responseMessage;
14 }
15 public HttpResponseMessage GetString(){
16     HttpResponseMessage responseMessage = new HttpResponseMessage(HttpStatusCode.OK){
17         Content = new StringContent("Hello World")    
18     };
19     responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
20     //responseMessage.Content.Headers.Add("Content-Disposition", "attachment;filename=figure.txt");
21     return responseMessage;
22 }
 
  • Web API会自动序列化自定义任何返回类型,然后将序列化的值写到响应正文里,状态码统一返回200
原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13509726.html