HTTP Request 資料入關

2022-07-11 06:00:10 字數 1995 閱讀 5390

現在的專案都推崇前後端分離,把業務邏輯更多的放在後端伺服器上,一方面出於現在前端種模擬較多,各種前端(web,desktop,pad,mobile)可以重用業務邏輯,二方面出於安全考慮。那麼前端(不一定是客戶端,處於前端的服務)需要資料就必須發動http 請求,http請求的資料是怎麼進入到我們的controller 的action裡的?

下面這些特性都是用在action 引數前的特性,讓框架知道怎麼繫結。

[fromheader] 從http 請求的header中

[fromquery] 從http請求的查詢字串中,也就是? 後的一堆資料中

[fromservices] 從依賴容器,這個為什麼沒通過構造注入呢,因為構造注入的是乙個物件用的很多,如果只是乙個方法用可以這樣方法注入。

[fromroute] 從路由中獲取引數

[fromform] 從表單獲取引數

[frombody] 從http請求訊息的正文獲取引數

另外可以指定[bindrequired] 必須繫結到值,要不引發modelstate 錯誤,

還可以[bindnever] 忽略次引數的繫結。

模型驗證不通過會返回400 badrequest 給前端,還沒進入我們的action裡面的邏輯,就被框架擋回去了,框架還是做了不少事情,前提是controller配置了[apicontroller]特性。

一:dataannotation 驗證:引入system.componentmodel.dataannotations 命名空間

一般所驗證的物件有很多屬性,這裡驗證分幾步,逐步公升級的過程

1. 屬性值強型別驗證:屬性本身就自帶驗證,比如屬性是int,你給個字元那麼肯定通不過,屬性是datetime,你給個不能轉換的時間,這個時候不用畫蛇添足的在上面加比如時間格式的正規表示式,多用系統的強型別,.netcore框架還是很智慧型的。

2. 內建特性驗證:屬性值強型別驗證通過後,還可以給屬性上新增比如最大值,最小值,範圍值等內建特性驗證。

3. 業務邏輯驗證:繼續公升級驗證規則,當內建特性不夠用後,還可以自定義特性,或者dto物件繼承 ivalidatableobject 物件。

1.建立新的特性,繼承自validationattribute. 然後給需要的資料加上特性。

2. dto物件繼承自ivaildatableobject 介面。

5種型別的過濾器:

autorization, resouce, exception action result.

使用者發起乙個請求;

請求經過asp.netcore應用程式的所有的中介軟體管道;

管道走完之後進入mvc的第乙個過濾器:授權過濾器(單向);

授權通過之後進入資源過濾器的前置方法;

將異常過濾器加入使用,後續有異常可以進行捕獲,之前如果發生異常不能捕獲;(想象成從這裡開了大try-catch,只能捕獲action中的,比如resultfilter中的捕獲不了,有點意外)

進行資料模型繫結,比如引數通過資料模型繫結傳參;

進入action過濾器前置方法;

執行action方法具體邏輯;

進入action過濾器後置方法;

進入result過濾器前置方法;

渲染result結果;

進入result過濾器後置方法;

進入資源過濾器的後置方法;

進入中介軟體管道返回;

最後將響應結果展現給使用者;

過濾器的註冊範圍

除了上面的全域性註冊,實現了特性的過濾器還可以以特性的方式標註在控制器或對應action方法上:

全域性註冊:針對系統中所有過濾器都有效;這種過濾器可以不繼承特性。

標註在控制器上(controller):對標註控制器中所有action方法都有效;

標註在action上:只針對對應的action有效;

繼續處理器下回下文待續...

HTTP Request的Get Post的區別

http 定義了與伺服器互動的不同方法,最基本的方法是 get 和 post ajax 開發 關心的只有get 請求和post 請求 與 1 在客戶端,get方式在通過 url提交資料,資料 在url中可以看到 post方式,資料放置在html header內提交。2 get方式提交的資料最多只能有...

HTTP Request的Get Post的區別

http 定義了與伺服器互動的不同方法,最基本的方法是 get 和 post ajax 開發,關心的只有get 請求和post 請求 get與post方法有以下區別 1 在客戶端,get方式在通過 url提交資料,資料 在url中可以看到 post方式,資料放置在html header內提交。2 g...

django原生的HttpRequest物件

回想一下,利用http協議向伺服器傳參有幾種途徑?關鍵字引數 注意 兩種引數的方式不要混合使用,在乙個正規表示式中只能使用一種引數方式 分別使用以上兩種獲取url值的方式提取出18 188 位置引數 關鍵字引數 檢視中函式 引數的位置可以變,跟關鍵字保持一致即可 def index request,...