ASP.NET Core 2.0網址重定向方法
如何在ASP.NET Core 2.0中實現網址重定向?
答案
新建一個空專案,在Startup.cs檔案中,配置RewriteOptions引數並新增網址重定向中介軟體(UseRewriter):
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { var rewrite = new RewriteOptions() .AddRedirect("films", "movies") .AddRewrite("actors", "stars", true); app.UseRewriter(rewrite); app.Run(async (context) => { var path = context.Request.Path; var query = context.Request.QueryString; await context.Response.WriteAsync($"New URL: {path}{query}"); }); }
執行,並在瀏覽器位址列輸入:,透過客戶端除錯工具觀察重定向過程:
在位址列輸入:,再次觀察重定向過程:
討論
網址重定向就是根據使用者自定義規則來修改請求的網址,目的是為了將伺服器資源和瀏覽器網址解繫結。這樣做可能是出於安全考慮, 搜尋引擎最佳化(SEO),使用者友好網址,將HTTP重定向到HTTPS等多種目的。
當你無法使用Web伺服器(IIS,Apache,Nginx)的重定向功能時,ASP.NET Core提供了一個可選項 - 請求網址重定向中介軟體。然後它的效能和功能比不上Web伺服器的重定向。
重定向中介軟體可以做兩件事情:客戶端重定向和伺服器重寫:
重定向(客戶端)
這是一個客戶端操作,工作流程如下:
1. 客戶端請求一個資源,比如 /films
2. 伺服器返回301(Moved Permanently)或者302(Found)狀態碼,並在響應頭中新增Location屬性,用來指示瀏覽器請求新的地址(比如/movies)。
3. 客戶端請求新的地址,並顯示在瀏覽器的位址列中。
重寫(服務端)
它是一個伺服器端操作,工作流程如下:
1. 客戶端請求一個資源,比如 /actors
2. 伺服器將其內部對映到新的地址(比如/stars)並且返回200(OK)。
在此過程中,客戶端並不知道伺服器端的內部對映操作,因此使用者看到的瀏覽器位址列依然顯示的是最初請求地址。
規則
重定向和重寫規則可以是正規表示式,更加詳細的資訊請參考:
自定義重定向規則
我們也可以自定義重定向規則,透過一個繼承自IRule介面的類來實現:
public class MoviesRedirectRule : IRule { private readonly string[] _matchPaths; private readonly string _newPath; public MoviesRedirectRule(string[] matchPaths, string newPath) { _matchPaths = matchPaths; _newPath = newPath; } public void ApplyRule(RewriteContext context) { var request = context.HttpContext.Request; // 已經是目標地址了,直接返回 if (request.Path.StartsWithSegments(new PathString(_newPath))) { return; } if (_matchPaths.Contains(request.Path.Value)) { var newLocation = $"{_newPath}{request.QueryString}"; var response = context.HttpContext.Response; response.StatusCode = StatusCodes.Status302Found; context.Result = RuleResult.EndResponse; response.Headers[HeaderNames.Location] = newLocation; } } }
然後在Configure()中,將此自定義規則新增到RewriteOptions裡面:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { var rewrite = new RewriteOptions() .Add(new MoviesRedirectRule( matchPaths: new string[] { "/films", "/features", "/albums" }, newPath: "/movies")); app.UseRewriter(rewrite); app.Run(async (context) => { var path = context.Request.Path; var query = context.Request.QueryString; await context.Response.WriteAsync($"New URL: {path}{query}"); }); }
執行,在位址列輸入:?id=123,觀察重定向過程:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2808834/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [譯]ASP.NET Core 2.0 網址重定向ASP.NET
- [譯]ASP.NET Core 2.0 路由引擎之網址生成ASP.NET路由
- ASP.NET 2.0 網頁採集方法ASP.NET網頁
- [譯]ASP.NET Core 2.0 路由引擎ASP.NET路由
- [譯]ASP.NET Core 2.0 區域ASP.NET
- ASP.NET Core 2.0 新功能彙總ASP.NET
- [譯]ASP.NET Core 2.0 依賴注入ASP.NET依賴注入
- [譯]ASP.NET Core 2.0 中介軟體ASP.NET
- [譯]ASP.NET Core 2.0 檢視引擎ASP.NET
- [譯]ASP.NET Core 2.0 部分檢視ASP.NET
- [譯]ASP.NET Core 2.0 檢視元件ASP.NET元件
- asp.net core 2.0 查缺補漏ASP.NET
- apache_httpd.conf_重定向到其它網址Apachehttpd
- [譯]ASP.NET Core 2.0 本地檔案操作ASP.NET
- [譯]ASP.NET Core 2.0 會話狀態ASP.NET會話
- [譯]ASP.NET Core 2.0 機密配置項ASP.NET
- [譯]ASP.NET Core 2.0 全域性配置項ASP.NET
- [譯]ASP.NET Core 2.0 佈局頁面ASP.NET
- [譯]ASP.NET Core 2.0 系列文章目錄ASP.NET
- Asp.net core 2.0 +SPA檔案上傳注意事項ASP.NET
- 揭祕ASP.NET 2.0的Eval方法ASP.NET
- ASP.NET Core 2.0 自定義 _ViewStart 和 _ViewImports 的目錄位置ASP.NETViewImport
- [譯]ASP.NET Core 2.0 帶初始引數的中介軟體ASP.NET
- 從頭編寫 asp.net core 2.0 web api 基礎框架 (3)ASP.NETWebAPI框架
- ASP.NET Core 2.0 支付寶當面付之掃碼支付ASP.NET
- ASP.NET Core 2.0 整合測試無法執行的問題ASP.NET
- 從頭編寫 asp.net core 2.0 web api 基礎框架 (1)ASP.NETWebAPI框架
- 從頭編寫 asp.net core 2.0 web api 基礎框架 (2)ASP.NETWebAPI框架
- 為什麼你需要將程式碼遷移到ASP.NET Core 2.0?ASP.NET
- asp.net中匹配URL網址的正規表示式ASP.NET
- ASP.NET Core ----ASP.NET Core中使用Code FirstASP.NET
- ASP.NET 6.0 Core 遷移 ASP.NET Core 7.0ASP.NET
- ASP.NET Core設定URLs的幾種方法ASP.NET
- 網址
- 用ASP.NET Core 2.0 建立規範的 REST API -- 預備知識ASP.NETRESTAPI
- ASP.NET 2.0的URL對映的實現方法ASP.NET
- 用ASP.NET Core 2.0 建立規範的 REST API -- DELETE, UPDATE, PATCH 和 LogASP.NETRESTAPIdelete
- 從頭編寫 asp.net core 2.0 web api 基礎框架 (5) EF CRUDASP.NETWebAPI框架