c# webapi 自定義返回數據

前言

webapi呢,我們創建的時候我給我們5個方法:get get(data)put post delete。

很明顯,get,get(data)是用來獲取,post用來修改數據的,put,delete用的比較少了,我習慣性用ajax,每接觸webapi的時候很少delete和put,後來用的用的覺得還是要知道這四個不同的東西。

經過一查發現是http協議,既然是一種協議操作還是自己操作的,比如說傳來4,5兩個數,你相加還是相減還不是自己決定的?越來越多的程序員會去區分get,post,因爲兩者必須要清楚,

所以這就造成一個現象mvc可能不支持put,和delete,可能會報405錯誤,還有一點需要說明,delete不要去傳數據,它是一種鏈接提交方式,然後還需要一點修改支持。

正文

webapi 返回函數有下面幾種:

void();返回空。

json(content);json對象

這裏我說明一下,有些人認爲返回一個序列化的string和json他們不是最終傳輸的都是string嗎,爲何前臺用ajax得到的一個是string一個是json,如果有着這樣的疑問相信手寫一遍ajax就沒有疑問了,後面我會講到。

ok和 ok(content)

Content(HttpStatusCode statusCode, T value) 自定義屬性和返回類型

BadRequest() 返回400;

Redirect(string location) 重定向

還有自定義的IHttpactionResult;

說說原理吧 ,我所以把IHttpactionResult放到最後面是因爲除了void(),其他都實現IHttpactionResult。

爲什麼是這樣呢,因爲http協議是有規範的,要有頭吧,要有身體吧,所以webapi就封裝了這樣一個接口供大家去實現你對應的規範,上面這些只是webapi幫你封裝好了的。

在下就示例一個它是怎麼寫的吧:

public class PageResult: ApiController,IHttpActionResult
{
  object _value;
  HttpRequestMessage _request;
  HttpStatusCode _code;
  public PageResult(T value, HttpStatusCode code)
  {
	_request = Request;
	_value = value;
	_code = code;
	//_request = request;
 }

  public Task ExecuteAsync(CancellationToken cancellationToken)
  {
	var response = new HttpResponseMessage()
	{
		Content = new ObjectContent(typeof(object), _value, new JsonMediaTypeFormatter()),
		RequestMessage = _request,
		StatusCode=_code	
	};
	return Task.FromResult(response);
  }
}

這樣就自己實現了返回對象了,總的來說就是符合http協議即可。

差點忘記了,前面說的ajax,返回stirng類型和json類型,其實就是得到了頭部的類型然後自己去轉換的,不是說http傳來的是json對象,http傳的一定是個字符串,而不會是一個json對象,其中封裝了獲取類型對象,然後判斷,轉換,調用回調函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章