WebAPI服務返回值
Web API 2 Action Result 返回值
- void
- HttpResponseMessage
- IHttpResponseMessage
- Other Return Type
1void 返回值
返回空值204 (No content)
例:
#region 空返回值
[HttpGet]
public void Post()
{
//Console.WriteLine("code good");
}
Request URL:http://localhost:49064/Products/Post
Request Method:GET
Status Code:204 No Content
Remote Address:[::1]:49064
Referrer Policy:no-referrer-when-downgrade
2HttpResponseMessage 返回值
直接返回HTTP相應訊息
例:
public HttpResponseMessage GetProduct(int id)
{
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null)
{
//NotFound();
HttpResponseMessage response1 = Request.CreateResponse(HttpStatusCode.NotFound, product);
return response1;
}
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, product);
// response.Content = new StringContent(id.ToString(), Encoding.Unicode);
response.Headers.CacheControl = new CacheControlHeaderValue()
{
// MaxAge = TimeSpan.FromMinutes(20)
MaxAge = TimeSpan.FromMilliseconds(10000)//設定快取時間
};
return response;
}
Request URL:http://localhost:49064/Products/Post
Request Method:GET
Status Code:204 No Content
Remote Address:[::1]:49064
Referrer Policy:no-referrer-when-downgrade
3IHttpActionResult返回值
Web API 2中引入了IHttpActionResult,它實質上它定義了一個非同步的HttpActionResult工廠方法
//
// 摘要:
// 定義一個用於以非同步方式建立 System.Net.Http.HttpResponseMessage 的命令。
public interface IHttpActionResult
{
//
// 摘要:
// 以非同步方式建立 System.Net.Http.HttpResponseMessage。
//
// 引數:
// cancellationToken:
// 要監視的取消請求標記。
//
// 返回結果:
// 在完成時包含 System.Net.Http.HttpResponseMessage 的任務。
Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}
如果採用IHttpActionResult作為返回值,Web Api 將會非同步的建立一個HttpResponseMessage型別物件,然後將它直接轉化為Http相應。
下面是一個實現了介面IHttpActionResult的類TextResult,它將返回一個純文字http相應
public class TextResult : IHttpActionResult
{
string _value;
HttpRequestMessage _request;
public TextResult(string value, HttpRequestMessage request)
{
_value = value;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
例:
public IHttpActionResult GetData()
{
return new TextResult("純文字資訊", Request);
}
4其他返回型別
For all other return types, Web API uses a media formatter to serialize the return value. Web API writes the serialized value into the response body. The response status code is 200 (OK).
對於其他的返回型別,WebAPI根據媒體型別(MIME)格式化器序列化返回值,然後將其作為Http響應的內容,並且http響應碼都是200.
例:
/// <summary>
/// 其他返回型別
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetALL()
{
return products;
}
頁面呼叫
$(document).ready(function () {
// Send an AJAX request
$.getJSON("Products/GetALL")
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#product'));
});
});
});
值:
[{"Id":1,"Name":"Hado Daved","Category":"fhjfs","Price":1.0,"start":"2017-09-29T15:12:27.1855723+08:00"},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75,"start":"2017-09-29T07:12:27.1855723Z"},{"Id":3,"Name":"Hammer","Category":"Hardware","Price":16.99,"start":"2017-09-29T15:12:27.1855723+08:00"}]
頁面通過非同步AJAX呼叫Web
後臺GetALL()方法根據請求的media formatter格式,將資料序列化為json資料。
請求的media formatter型別在HTTP請求響應報文中:
Web API uses the Accept header in the request to choose the formatter. For more information, see Content Negotiation.
Web API 不只在其他返回值型別,在上述所有的返回值型別中,Web API 實質上都是通過HTTP響應報文的media formatter格式來序列化返回值,(這個請求格式封裝在請求上下文的Request物件的Accept header屬性中)
如還是請求上文的其他返回值型別 GetALL()方法,這次不通過非同步呼叫,直接在瀏覽器地址呼叫
從圖上可以看出請求的是文字型別,響應的也是文字型別。
WebAPI序列化後的時間資料格式<start>2017-09-29T15:32:27.5102052+08:00</start>
,對於使用過JSON.NET的不會陌生,WEBAPI的序列化方法正是採用的JSON.NET,這比asp.net mvc 的json序列化方法(JavaScriptSerializer)效能高得多。
相關文章
- 構建一個語音轉文字的WebApi服務WebAPI
- .net webapi 入門之註冊swagger服務WebAPISwagger
- 一站式WebAPI與認證授權服務WebAPI
- 【.NET6】gRPC服務端和客戶端開發案例,以及minimal API服務、gRPC服務和傳統webapi服務的訪問效率大對決RPC服務端客戶端APIWeb
- webapiWebAPI
- WebApi - 路由WebAPI路由
- webapi路由WebAPI路由
- 微服務的服務間通訊與服務治理微服務
- [翻譯]微服務設計模式 - 5. 服務發現 - 服務端服務發現微服務設計模式服務端
- docker內服務訪問宿主機服務Docker
- linux服務之NFS和SAMBA服務LinuxNFSSamba
- 服務計算 SO 服務的設計
- ejb服務能否轉換成socket服務?
- go微服務系列(二) - 服務註冊/服務發現Go微服務
- 服務端指南 服務端概述 | 微服務架構概述服務端微服務架構
- WebApi介面 - 如何在應用中呼叫webapi介面WebAPI
- dns服務DNS
- 服務物件物件
- workerman 服務
- Samba服務Samba
- 服務-mysqlMySql
- 磁碟服務
- chrony服務
- nginx服務Nginx
- .NET之WebAPIWebAPI
- WebAPI 操作返回WebAPI
- Nginx服務系列——靜態資源web服務NginxWeb
- Python 服務端整合 騰訊雲 IM 服務Python服務端
- [分散式]--Dubbo分散式服務框架-服務治理分散式框架
- 服務端常見服務安裝及配置服務端
- 小白入門微服務(4) – 服務註冊與服務發現微服務
- 微服務架構中的服務邊界與服務識別微服務架構
- 小白入門微服務(4) - 服務註冊與服務發現微服務
- 服務端渲染到前端渲染,再到“服務端渲染”服務端前端
- Kali Linux常用服務配置教程DHCP服務原理Linux
- 產業服務是什麼意思?詳解產業服務產業
- 領域服務與應用服務的職責
- 使用dubbo+zookeeper釋出服務與呼叫服務