前言
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對象,其中封裝了獲取類型對象,然后判斷,轉換,調用回調函數。