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 自定義 _ViewStart 和 _ViewImports 的目錄位置ASP.NETViewImport
- 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 Core 2.0 建立規範的 REST API -- DELETE, UPDATE, PATCH 和 LogASP.NETRESTAPIdelete
- 使用ASP.NET Core支援GraphQL -- 較為原始的方法ASP.NET
- 如何在 ASP.NET Core 5 中過載 Action 方法ASP.NET
- 用VSCode開發一個asp.net core2.0+angular5專案(5): Angular5+asp.net core 2.0 web api檔案上傳VSCodeASP.NETAngularWebAPI
- 翻譯 - ASP.NET Core 託管和部署 - 在 Linux 上使用 Nginx 託管 ASP.NET Core 網站ASP.NETLinuxNginx網站
- 網址
- 在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactoryASP.NETHTTPclient
- url.cn短網址 url.cn短網址網址縮短教程
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可執行前後臺原始碼ASP.NETWebAPIIDEServerAngular原始碼
- ASP.NET Core - 開篇ASP.NET
- Asp.Net Core SwaggerUI 接入ASP.NETSwaggerUI
- asp.net core 整合JWTASP.NETJWT
- asp.net core 整合 PrometheusASP.NETPrometheus
- 常用網址
- 【ASP.NET Core】配置應用程式地址的N多種方法ASP.NET
- 5種設定ASP.NET Core應用程式URL的方法ASP.NET
- 【asp.net core 系列】 1 帶你瞭解一下asp.net coreASP.NET
- 網址外鏈的製作技巧與方法分享
- ASP.Net Core專案在Mac上使用Entity Framework Core 2.0進行遷移可能會遇到的一個問題.ASP.NETMacFramework
- Entity Framework Core 2.0 入門Framework
- ASP.NET Core Web API 索引 (更新Redis in .NET Core)ASP.NETWebAPI索引Redis
- 【asp.net core 系列】14 .net core 中的IOCASP.NET
- ASP.Net Core5.0 EF Core使用記錄ASP.NET
- ASP.NET Core 啟動(1)ASP.NET
- ASP.NET core 2.2 截圖ASP.NET
- ASP.NET Core 中使用TypeScriptASP.NETTypeScript
- asp.net core mvc 分頁ASP.NETMVC
- asp.net core 系列之ConfigurationASP.NET
- ASP.NET Core 配置檔案ASP.NET
- asp.net core 系列之StartupASP.NET
- 理解ASP.NET Core - [02] MiddlewareASP.NET
- asp.net core 整合swagger uiASP.NETSwaggerUI