ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WEBAPI action返回类型

2021-11-09 07:00:06  阅读:141  来源: 互联网

标签:WEBAPI 返回 return lstRes Ok IHttpActionResult action new public


转载

https://blog.csdn.net/Fang_Yanchang/article/details/109377636?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242.1

 

void   Return empty 204 (No Content) 返回无内容

HttpResponseMessage  Convert directly to an HTTP response message.直接转换为一个Http Reponse消息。

IHttpActionResult  Call ExecuteAsync to create an HttpResponseMessage, then convert to an HTTP response message. 调用ExecuteAsync先创建一个HttpReponseMessage,在转换为Http Reponse输出。 

其它类型 Write the serialized return value into the response body; return 200 (OK). 序列化后的信息返回到消息体中。

void无返回值

使用void关键字申明方法没有返回值。它的使用也很简单,我们来看一个示例。

public class ORDER

{

public string ID { get; set; }

public string NO { get; set; }

public string NAME { get; set; }

}

public class OrderController : ApiController

{

[HttpPost]

public void SaveOrder(ORDER name)

{

//处理业务逻辑

}

}

$(function () {

$.ajax({

type: 'post',

url: 'http://localhost:21528/api/Order/SaveOrder',

data: { ID: "aaa", NAME: "test" },

success: function (data, status) {

alert(data);

}

});

});
在success方法里面得不到返回值,并且会返回http状态码204,告诉客户端此请求没有返回值。

  

IHttpActionResult

on<T>(T content)
在WebApi的ApiController这个抽象类里面,为我们封装了Json<T>(T content)这个方法,它的用法和MVC里面的JsonResult基本类似。我们通过一个例子来说明它的用法:

[HttpGet]

public IHttpActionResult GetOrder()

{

var lstRes = new List<ORDER>();

lstRes.Add(new ORDER() { ID = "aaaa", NO = "111", NAME = "111" });

lstRes.Add(new ORDER() { ID = "bbbb", NO = "222", NAME = "222" });

return Json (lstRes);

}

Json( )方法的返回类型JsonResult<T>,实现了IHttpActionResult接口。

使用Ajax请求来调用该方法。

$(function () {

$.ajax({

type: 'get',

url: 'http://localhost:21528/api/Order/GetOrder',

data: {},

success: function (data, status) {

alert(data);

}

});

});

  

Ok()、 Ok<T>(T content)

Ok( )方法的定义如下:

protected internal virtual OkResult Ok();

例如:

[HttpGet]

public IHttpActionResult GetOKResult()

{

return Ok();

}

如果返回Ok(),就表示不向客户端返回任何信息,只告诉客户端请求成功。

除了Ok()之外,还有另外一个重载Ok<T>(T content)。如下:

[HttpGet]

public IHttpActionResult GetOKResult(string name)

{

return Ok<string>(name);

}

  

Content<T>()

[HttpGet]

public IHttpActionResult GetContentResult()

{

return Content<string>(HttpStatusCode.OK, "OK");

}

向客户端返回值和http状态码。

  

BadRequest()

[HttpGet]

public IHttpActionResult GetBadRequest(ORDER order)

{

if (string.IsNullOrEmpty(order.ID))

return BadRequest();

return Ok();

}

向客户端返回400的http错误。

  

Redirect(string location)

[HttpGet]

public IHttpActionResult RedirectResult()

{

return Redirect("http://localhost:21528/api/Order/GetContentResult");

}

将请求重定向到其他地方。

  

自定义IHttpActionResult

上面介绍了一些系统内置的常用的实现IHttpActionResult接口的方法。如果我们需要自定义IHttpActionResult的返回呢?

在介绍之前,我们有必要先来看看IHttpActionResult类型的定义,将IHttpActionResult转到定义可以看到:

namespace System.Web.Http

{

public interface IHttpActionResult

{

Task<System.Net.Http.HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);

}

}

这个接口包含唯一的一个方法ExecuteAsync(),此方法将以异步方式创建一个HttpResponseMessage实例返回给客户端。

有了这个作为基础,下面,我们自定义一个bootstrapTable服务端分页的子类去展示自定义IHttpActionResult的用法。

首先,自定义一个实现类。

public class PageResult : IHttpActionResult

{

object _value;

HttpRequestMessage _request;

public PageResult(object value, HttpRequestMessage request)

{

_value = value;

_request = request;

}

public Task<HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken)

{

var response = new HttpResponseMessage()

{

Content = new ObjectContent(typeof(object), _value, new JsonMediaTypeFormatter()),

RequestMessage = _request

};

return Task.FromResult(response);

}

}

然后,在API接口里面返回PageResult对象。

[HttpGet]

public IHttpActionResult GetPageRow(int limit, int offset)

{

var lstRes = new List<ORDER>();

lstRes.Add(new ORDER() { ID = "aaaa", NO = "111", NAME = "111" });

lstRes.Add(new ORDER() { ID = "bbbb", NO = "222", NAME = "222" });

var oData = new { total = lstRes.Count, rows = lstRes.Skip(offset).Take(limit).ToList() };

return new PageResult(oData, Request);

}

  

自定义类型

以上几种返回值类型能解决我们大部分返回值的问题,当然,你也可以将webapi的接口和普通方法一样,返回任意的类型,WebApi会自动序列化你自定义任何返回类型,然后将序列化的值写到响应正文里,状态码统一返回200。比如:

[HttpGet]

public object GetOther()

{

var lstRes = new List<ORDER>();

lstRes.Add(new ORDER() { ID = "aaaa", NO = "111", NAME = "111"});

lstRes.Add(new ORDER() { ID = "bbbb", NO = "222", NAME = "222"});

return lstRes;

}

  

 

标签:WEBAPI,返回,return,lstRes,Ok,IHttpActionResult,action,new,public
来源: https://www.cnblogs.com/JerryZhang320/p/15527114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有