Web API 2 中 Action的返回值

2021-08-16 02:30:23 字數 3839 閱讀 5483

原文更新日期:2014.02.03

asp.net web api 2 入門教學:

這篇教程描述了 asp.net web api 是怎樣將controller的action返回值轉變為http響應值的。

乙個 web api controller 的 action 可以返回以下任何一種型別

4.一些其他的型別

web api 會根據返回型別的不同來使用不同的機制來建立http響應。

返回型別                web api 響應

void 返回 http 204(no content)

httpresponsemessage 直接轉換為http response message.

ihttpactionresult 呼叫executeasync來建立乙個httpresponsemessage,然後將它轉換為乙個http response message.

其他型別 將序列化後的返回值寫入響應的response body;返回http 200(ok)

如果返回值是void,web api 將會直接返回乙個空的http響應,狀態碼是204(no content).

示例controller:

public class valuescontroller : apicontroller

}

http 響應為:

date: mon, 27 jan 2014 02:13:26 gmt如果action返回的是乙個 httpresponsemessage ,web api 將會將返回值直接轉化為乙個http response message, 並使用 httpresponsemessage 類的屬性來填充響應結果。

這種返回型別可以讓你更好的控制response message。舉個例子,下面的這個controller 的 action 設定了 cache-control header。

public class valuescontroller : apicontroller

; return response;

} }

響應為:

hello如果你將乙個域模型做為引數傳遞給 createresponse 方法,web api會使用media formatter(

來將序列化後的model寫入響應的body。

web api 在請求中使用 accept 來選擇formatter。更多資訊可以看

ihttpactionresult 介面是 web api 2新加的。從本質上說,它定義了乙個httpresponsemessage 的工廠。使用該介面有以下好處:

簡化controller的單元測試

為 建立不同的http響應 新增相同的邏輯

通過隱藏構造響應時的低階的詳細資訊來使 controller action 的目的更清晰。

ihttpactionresult 僅包含了1個方法:executeasync。它能非同步的建立乙個 httpresponsemessage 例項。

如果乙個controller的action返回型別是ihttpactionresult, web api 會呼叫executeasync 來建立乙個 httpresponsemessage,然後將它轉化為乙個 http response message。

下面是乙個簡單的、建立乙個清晰的文字響應的ihttpactionresult 的實現:

}}示例 controller action:

public class valuescontroller : apicontroller

}

響應為:

hello更常用的是使用 system.web.http.results 下的 ihttpactionresult 的實現。apicontroller 類定義了一些返回這些內建型別的方法。

在下面的例子中,如果請求中不含有乙個已知的 product id,對應 controller 將會呼叫 apicontroller.notfound來建立乙個http404(not found)響應;否則,controller會呼叫 apicontroller.ok 來返回乙個http200(ok),並將指定的product包含在響應中。

}對於所有的其他的返回型別, web api 使用 media formatter 將返回值序列化。web api 會將序列化後的值寫入響應body,響應的狀態碼為200(ok)。

public class productscontroller : apicontroller

}

這種返回值的缺點之一就是不能直接返回乙個error 狀態碼,比如404.然而,你可以通過丟擲httpresponseexception 來返回錯誤碼.更多資訊請看:

web api 在請求中使用 accept 來選擇formatter。更多資訊可以看

示例請求:

host: localhost:24127示例響應:

在webform專案中使用web api:

關於 Web Api 2 認證與授權

認證與授權 認證與授權,authentication and authorize,這個是兩個不同的事。認證是對訪問身份進行確認,如驗證使用者名稱和密碼,而授權是在認證之後,判斷是否具有許可權進行某操作,如 authorize 屬性。簡單說,他們之間先後順序是先認證,再授權。web api 的客戶端可...

Web Api 2 介面API文件美化

使用用第三方提供的swgger ui 幫助提高 web api 介面列表的閱讀性,並且可以在頁面中測試服務介面。執行程式如下 注意 在ie中必須輸入紅色部分。並且可以對方法進行測試。在開發web api 是可以寫清楚注釋,並且在文件中可以全部的顯示出來。在工程中處了安裝swashbuckle 以外,...

Action2中的方法萬用字元

這裡的表示接收前面action裡通過萬用字元傳來的值,例如你配置的是 然後呼叫 editcrud.action,則method裡獲得的值是edit,將會呼叫這個action裡面的 edit方法 附 action中的方法萬用字元 有些時候對action中方法的呼叫滿足一定的規律,例如edit acti...