如何在 ASP.NET Core 中使用 URL Rewriting 中间件
URL rewriting 是根據預先配置好的一組規則去修改 request url,值得注意的是:URL Rewriting 的重寫功能和 url 重定向 是兩個概念,本篇我們就來討論下如何在 ASP.NET Core 中對 url 進行 rewriting。
安裝 URL Rewriting 中間件
要想使用 URL Rewriting 功能,需要通過 nuget 引用 Microsoft.AspNetCore.Rewrite 包,可以通過 Visual Studio 2019 的 NuGet package manager 可視化界面安裝 或者 通過 NuGet package manager 命令行工具輸入以下命令:
dotnet?add?package?Microsoft.AspNetCore.Rewriteurl重定向 和 url重寫
url重定向 和 url重寫 是兩個完全不同的概念,url重定向是 server 端返回 Http Status Code 301 或者 302 給 客戶端并且告訴客戶端使用另一個鏈接訪問資源,客戶端拿到新鏈接后實現跳轉,從這個過程中可以看出,這個操作是發生在客戶端,而且還多了一個不可回避的 round-trip。
相反,url重寫 是server端的操作,它會根據預先指定的一組規則去修改request url,在 rewriting 的過程中,修改后的 request url 不會和 重定向 一樣再發送給客戶端,只要是在一個請求內,client 根本不關心 server 端內部是如何實現資源切換的,值得注意的是,URL rewriting 也不是什么新的技術,在 ASP.NET 時代就有了。
總的來說,url重寫 是發生在 server 端,并且沒有所謂的 round-trip。
配置 url 重定向
可以在 Startup 類中進行 URL rewriting 和 URL redirection 功能配置,舉個例子,實現 http 請求自動跳轉成 https。
public?class?Startup{public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env){app.UseRewriter(new?RewriteOptions().AddRedirectToHttps());}}配置 URL rewriting
下面的代碼展示了 URL rewriting,請注意 request url 已經被 AddRewrite 的規則所監視。
public?class?Startup{public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env){if?(env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();//rewritevar?rewrite?=?new?RewriteOptions().AddRewrite("Home/Index",?"Home/Privacy",?true);app.UseRewriter(rewrite);app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints?=>{endpoints.MapControllerRoute(name:?"default",pattern:?"{controller=Home}/{action=Index}/{id?}");});}}從圖中可以看出,url 請求的是 Home/Index,顯示的是 Home/Privacy 內容,如果你有更加復雜的業務需求,可以使用 正則表達式 來定義規則,如下代碼所示:
var?rewrite?=?new?RewriteOptions().AddRewrite(@"^Home/User?Code=(\d+)",?"Home/$1",?true);app.UseRewriter(rewrite);使用自定義的 URL rewriting
如果正則表達式都不能滿足需求,完全可以 自定義 來實現深度定制,只需要實現 IRule 接口中的 ApplyRule 方法即可,如下代碼所示:
public?class?CustomRule?:?Microsoft.AspNetCore.Rewrite.IRule{public?void?ApplyRule(RewriteContext?context){throw?new?NotImplementedException();}}下面的代碼展示了如何使用 ApplyRule,不過這里只是為了演示目的,你可以根據自己的需求來實現。
public?class?CustomRule?:?Microsoft.AspNetCore.Rewrite.IRule{public?void?ApplyRule(RewriteContext?context){var?request?=?context.HttpContext.Request;var?host?=?request.Host;if?(host.Host.Contains("localhost",StringComparison.OrdinalIgnoreCase)){if(host.Port?==?80){context.Result?=?RuleResult.ContinueRules;return;}???????????????}var?response?=?context.HttpContext.Response;response.StatusCode?=?(int)HttpStatusCode.?BadRequest;context.Result?=?RuleResult.EndResponse;}}將 自定義規則 添加到 rule 集合
可以在 Startup.Configure 方法中將自定義的rule規則添加到 rule 集合中,如下代碼所示:
public?void?Configure(IApplicationBuilder?app,?IHostingEnvironment?env){var?options?=?new?RewriteOptions();options.Rules.Add(new?CustomRule())app.UseRewriter(options);}總結一下:URL rewriting 切斷了 url地址 和 資源 的映射關系,你可以利用這項技術定義一些非常語義化的 url 地址,也方便 搜索引擎 收錄。
譯文鏈接:https://www.infoworld.com/article/3445867/how-to-use-url-rewriting-middleware-in-aspnet-core.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的如何在 ASP.NET Core 中使用 URL Rewriting 中间件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样使用C# 获取WIFI的连接状态?
- 下一篇: asp.net ajax控件工具集 Au