日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在 ASP.NET Core 中使用 URL Rewriting 中间件

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 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.Rewrite

url重定向 和 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 中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。