iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

本篇重點

Action filter


前言

今天主要討論的部分是下圖紅色框框的範圍
這一塊包含了Moddle Binding 和Action以及Action filter
本篇主要聚焦在Action fitler

Action filter是在Model binding 之後所進入的一個filter
也就是下圖紅色框框部分


Action filter

因為是已經過了Modle Biding
主要是在進入Action的前後再去做一層判斷處理

使用了IActionFilter
並實作兩個方法
OnActionExecuting - 進入Action之前
OnActionExecuted - 結束Action後

舉個例子
假設今天一個website
因為網站要升級分成新舊兩版,可能新版的網頁還沒有支援手機
想要讓手機看到的還是舊版,但網頁版是新版
可以利用Action去處理這樣的分流

  1. 建立action filter
    新增一支叫做MobileActionFilter.cs
    裡面繼承IActionFilter這個介面
    並在OnActionExecuting裡面去判段request來源的裝置
    例外這支filter也會傳入兩個參數,告訴filter要導向到哪個action

  2. 新增filter到controller
    我們在Home/Index首頁
    假設今天這一個action是給新的網頁
    但我們要讓mobile進來的導到舊的action
    在上面新增一個剛剛建立好的filter,並傳入要目標的action還有controller

    這邊filter的宣告方式和上一篇有點不相同
    原因是因為在MobileActionFilter程式裡面有些繼承了Attribute
    所以可以直接使用Attribute的宣告方式

[MobileActionFilter(Action = "OldWeb", Controller = "Home")]
  1. 使用postman模擬手機瀏覽
    因為要再header傳入x-mobile去模擬手機的的行為
    在這直接使用postman操作

    可以看到request首頁的網址
    但回傳的會結果會是舊的web

  2. 網頁瀏覽驗證
    同樣在瀏覽器瀏覽相同的網址
    回傳的會是新的web

這邊註明一下會看到分別有5000 port和5001 port
是因為5000是http, 5001是https
在使用vs2019建立專案的時候
因為一開始有勾選使用ssl
所以提供了兩個不同的port 分給http和https

也可以直接在launchSettings.json手動去做更改


今天先解說一下Action filter
未來會再補上
Resource Filter和Middleware filter的整理


上一篇
Day 13 Controller Initialization
下一篇
Day 15 View
系列文
ASP.NET Core 入門實戰30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言