zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux实践——内核编程 基础模块
    linux内核分析 课程总结
    linux内核分析 期中总结
    linux内核分析 第八周
    linux内核分析 第4章读书笔记
    linux内核分析 第七周
    2020JAVA面试题
    springboot redis工具类
    mysql关于时间函数的应用
    jetty的web部署
  • 原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13509726.html
Copyright © 2011-2022 走看看