AspNetCore開源中間件-VueRouterHistory

前言

用過VueRouter路由組件的應該都知道,VueRouterhashhistory兩種模式。hash模式會在url中插入#history模式下url則看上去更加簡潔美觀。如果想要支持history模式則必須要后端服務進行配合。

常用后端服務器配置方式請參考 后端配置例子

后端配置例子

注意:下列示例假設你在根目錄服務這個應用。如果想部署到一個子目錄,你需要使用 Vue CLI 的 publicPath 選項 (opens new window)和相關的 router base property (opens new window)。你還需要把下列示例中的根目錄調整成為子目錄 (例如用 RewriteBase /name-of-your-subfolder/ 替換掉 RewriteBase /)。

Apache

<IfModule?mod_rewrite.c>RewriteEngine?OnRewriteBase?/RewriteRule?^index\.html$?-?[L]RewriteCond?%{REQUEST_FILENAME}?!-fRewriteCond?%{REQUEST_FILENAME}?!-dRewriteRule?.?/index.html?[L]
</IfModule>

除了 mod_rewrite,你也可以使用 FallbackResource。

nginx

location?/?{try_files?$uri?$uri/?/index.html;
}

原生 Node.js

const?http?=?require('http')
const?fs?=?require('fs')
const?httpPort?=?80http.createServer((req,?res)?=>?{fs.readFile('index.html',?'utf-8',?(err,?content)?=>?{if?(err)?{console.log('We?cannot?open?"index.html"?file.')}res.writeHead(200,?{'Content-Type':?'text/html;?charset=utf-8'})res.end(content)})
}).listen(httpPort,?()?=>?{console.log('Server?listening?on:?http://localhost:%s',?httpPort)
})

基于 Node.js 的 Express

對于 Node.js/Express,請考慮使用 connect-history-api-fallback 中間件 。

IIS

安裝 IIS UrlRewrite

在你的網站根目錄中創建一個 web.config 文件,內容如下:

<?xml?version="1.0"?encoding="UTF-8"?>
<configuration><system.webServer><rewrite><rules><rule?name="Handle?History?Mode?and?custom?404/500"?stopProcessing="true"><match?url="(.*)"?/><conditions?logicalGrouping="MatchAll"><add?input="{REQUEST_FILENAME}"?matchType="IsFile"?negate="true"?/><add?input="{REQUEST_FILENAME}"?matchType="IsDirectory"?negate="true"?/></conditions><action?type="Rewrite"?url="/"?/></rule></rules></rewrite></system.webServer>
</configuration>

Caddy

rewrite?{regexp?.*to?{path}?/
}

Firebase 主機

在你的 firebase.json 中加入:

{"hosting":?{"public":?"dist","rewrites":?[{"source":?"**","destination":?"/index.html"}]}
}

警告

給個警告,因為這么做以后,你的服務器就不再返回 404 錯誤頁面,因為對于所有路徑都會返回 index.html 文件。為了避免這種情況,你應該在 Vue 應用里面覆蓋所有的路由情況,然后再給出一個 404 頁面。

const?router?=?new?VueRouter({mode:?'history',routes:?[{?path:?'*',?component:?NotFoundComponent?}]
})

或者,如果你使用 Node.js 服務器,你可以用服務端路由匹配到來的 URL,并在沒有匹配到路由的時候返回 404,以實現回退。更多詳情請查閱 Vue 服務端渲染文檔 (opens new window)。

原生AspNetCore實現

現如今AspNetCore完全不需要依賴IIS即可進行部署,如何在AspNetCore原生應用中進行支持VueRouterhistory想必是很多人遇到到的問題之一,也許大部分人選擇使用hash模式,因為它雖然丑點,但是不需要任何配置即可使用。為了帶給像我一樣強烈需要history模式的用戶,索性寫了個中間件,經過測試,能夠完美支持VueRouter組件history模式的部署。

VueRouterHistory

VueRouterHistory是實現原生AspNetCore下支持VueRouterhistory模式的中間件。

源碼已開源在Github: https://github.com/SpringHgui/VueRouterHistory

使用方法

  1. 通過nuget安裝VueRouterHistory

Install-Package?VueRouterHistory?-Version?1.0.2
  1. 注冊中間件app.UseVueRouterHistory()

app.UseRouting()app.MapControllers()之后添加app.UseVueRouterHistory();

//?This?method?gets?called?by?the?runtime.?Use?this?method?to?configure?the?HTTP?request?pipeline.
public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env)
{if?(env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");//?The?default?HSTS?value?is?30?days.?You?may?want?to?change?this?for?production?scenarios,?see?https://aka.ms/aspnetcore-hsts.app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();//?==============添加這一行即可================app.UseVueRouterHistory();app.UseAuthorization();app.UseEndpoints(endpoints?=>{endpoints.MapControllerRoute(name:?"default",pattern:?"{controller=Home}/{action=Index}/{id?}");});
}
  1. 將Vue編譯后的產物全部放置到wwwroot文件夾下

  2. 開始體驗你的應用吧~

結語

VueRouterHistory中間件的使用,讓我們免于對iis進行配置以實現history模式部署,使項目不管是托管在IIS還是直接自托管模式,都不需要進行額外的配置。歡迎有需要的朋友通過VueRouterHistory包進行支持history模式,如遇到問題,請提交ISSU。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287767.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

T-SQL編程基礎之三:游標(Cursor)編程

SQL是一種面向集合操作的語言,大多情況下,一個SQL語句將會操作數據庫表里的很多數據,基本上,一個數據庫的程序員腦子里應該想的是如何整體操作一個表或者是幾個表。 但也有一些情況下,試圖整表操作是不現實的,需要一行一行處理數據,這種情況下,SQL語言提供了所謂游標的…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂

一、前言 幾個月前編寫了一份python語言入門的博文&#xff0c;近期重新審閱了一遍發現編寫的質量太過隨意&#xff0c;可能對于一部分人并不是非常友好&#xff0c;故此重新編寫Python語言的零基礎教程。 本篇教程將會盡量把一些專業術語給讀者講解清楚&#xff0c;并且讓讀…

centos 7下安裝mysql_Centos7下安裝MySQL5.7(數據庫的最全安裝方法)

Centos7下使用yum安裝mysql數據庫首先Centox7已經不支持mysql&#xff0c;因為收費了你懂得&#xff0c;所以內部集成了mariadb&#xff0c;而安裝mysql的話會和mariadb的文件沖突&#xff0c;所以需要先卸載掉mariadb。由于確定使用mysql&#xff0c;那只有卸載mariadb了。一、…

環形隊列

在網上看到一篇比較好的介紹隊列的文章&#xff0c;地址為&#xff1a;http://www.cnblogs.com/kubixuesheng/p/4104802.html 特此感謝原創作者&#xff0c;以下均為摘抄。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1、…

HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演變過程和優化

一、協議的演變過程和時間 HTTP1.0(1996年) -> HTTP1.1(1999年) -> SPDY(2012年google提出了SPDY的方案) -> HTTP2.0(2013年8月進行首次合作共事性測試) 二、影響一個HTTP網絡請求的因素 主要有兩個:帶寬和延遲 1)帶寬:網絡基礎建設已經使得帶寬得到極大的提升…

OK335xS GPMC nand device register hacking

/********************************************************************************** OK335xS GPMC nand device register hacking* 說明&#xff1a;* 由于最近遇到No NAND device found這個內核錯誤&#xff0c;在網絡上也沒找到很好的* 解決辦法&am…

Blazor University (19)使用 RenderFragments 模板化組件 —— 數據傳遞

原文鏈接&#xff1a;https://blazor-university.com/templating-components-with-renderfragements/passing-data-to-a-renderfragement/將數據傳遞給 RenderFragment源代碼[1]到目前為止&#xff0c;我們使用了僅包含子標記的 RenderFragments&#xff0c;然后在渲染組件時按…

一頭扎進Node(三) - File System

file.open:異步模式打開文件 fs.open(path, flags[, mode], callback) 案例代碼如下&#xff1a; var fs require(fs);/*** 參數說明&#xff1a;* 1.path&#xff1a;要打開的文件的文件路徑* 2.flags&#xff1a;打開文件的方式 讀/寫* r&#xff1a;只讀方式打開文件…

《零基礎看得懂的C語言入門教程 》——(十二)原來結構體是這么回事

一、學習目標 了解C語言的結構體的使用方法了解C語言結構體的結構的賦值了解多種C語言結構體變量的賦值方法和取值方法 目錄 C語言真的很難嗎&#xff1f;那是你沒看這張圖&#xff0c;化整為零輕松學習C語言。 第一篇&#xff1a;&#xff08;一&#xff09;脫離學習誤區 第…

【學生選課系統經典】C#與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 注意,由于C#語言的強大功能,下面的代碼適用于SQLSERVER2000、也適合于SQLSERVER2005。區別僅…

Java精選筆記_JDBC

JDBC概述 什么是JDBC JDBC全稱是Java數據庫連接&#xff08;Java Database Connectivity&#xff09;&#xff0c;應用程序可通過這套API連接到關系數據庫&#xff0c;并使用SQL語句來完成對數據庫中數據的查詢、更新和刪除等操作。是一套用于執行SQL語句的Java API。Java的數據…

mysql關系數據庫引擎_MySQL數據庫引擎詳解

作為Java程序員&#xff0c;MySQL數據庫大家平時應該都沒少使用吧&#xff0c;對MySQL數據庫的引擎應該也有所了解&#xff0c;這篇文章就讓我詳細的說說MySQL數據庫的Innodb和MyIASM兩種引擎以及其索引結構。也來鞏固一下自己對這塊知識的掌握。Innodb引擎Innodb引擎提供了對數…

Java之synchronized的JVM底層實現原理精簡理解

1 synchronized的JVM底層原理實現的精簡理解 Java 虛擬機中的synchronized基于進入和退出Monitor對象&#xff08;也稱為管程或監視器鎖&#xff09;實現&#xff0c; 無論是顯式同步(synchronized作用在同步代碼塊&#xff0c;有明確的 monitorenter 和 monitorexit 指令) 還是…

三分鐘掌握Actor和CSP模型

點擊上方藍字進行關注前文傳送門&#xff1a;《三分鐘掌握共享內存模型和 Actor模型》&#xff0c; 一直想比較Actor模型與golang的CSP模型&#xff0c;經過一段時間的實戰記錄了本文。Actor vs CSP模型? 傳統多線程的的共享內存&#xff08;ShareMemory&#xff09;模型使用l…

DateTimeToUnix/UnixToDateTime 對接時間轉換

問題&#xff0c;通過毫秒數來解析出時間&#xff1a;&#xff08;很多對接的時候經常需要用到&#xff09; <?php $MyJson {"jingdong_vas_subscribe_get_responce":{"code":"0","item_code":"FW_GOODS-2236-1","…

【學生選課系統經典】VB與SQLSERVER連接:Windows應用工程案例

實驗任務描述 1 用VB6訪問SQLSERVER數據庫(兩種安全模式); 2 用VB6完成數據庫指定表上的數據顯示; 3 用VB6完成數據庫指定表上的數據插入、刪除和更新; 4 用VB6完成SQLSERVER2008數據庫用戶驗證。 一、數據庫系統 該實驗中,所要求的數據庫名稱為SCHOOL,總共涉及以下表:

丟失api-ms-win-crt-runtime-l1-1-0.dll

運行Cmder的時候提示&#xff1a;丟失api-ms-win-crt-runtime-l1-1-0.dll在網上找了一些方法&#xff0c;基本解決方法都是裝VC2015的運行時&#xff0c;但是我安裝的時候出錯&#xff0c;大家可以先試試。接著我就去解決安裝出錯這問題沒&#xff0c;折騰了半天也沒成功。后來…

《假如編程是魔法之零基礎看得懂的Python入門教程 》——(二)魔法實習生第一步了解魔杖的使用

學習目標 了解什么是開發環境了解python語言的環境安裝了解python語言編程的編輯器工具 目錄 第一篇&#xff1a;《假如編程是魔法之零基礎看得懂的Python入門教程 》——&#xff08;一&#xff09;既然你選擇了這系列教程那么我就要讓你聽得懂 第三篇&#xff1a;《假如編…

Java之synchronized可重入性的理解

1 synchronized可重入性的理解 當一個線程試圖操作一個由其他線程持有的對象鎖的臨界資源時&#xff0c;將會處于阻塞狀態&#xff0c;但當一個線程再次請求自己持有對象鎖的臨界資源時&#xff0c;如果當前鎖是重入性&#xff0c;會請求將會成功&#xff0c;如果當前鎖不是可…

onmouseover-onmouseout

<input type"checkbox" value"autoLogin" οnmοuseοver"block()" οnmοuseοut"none()">兩周內自動登錄 <div id"div1">為了您的信息安全請不要在網吧或公共電腦勾選此項</div> <script> functi…