Hello Blazor:(6)你必须踩过这5个坑,才算学会部署Blazor WebAssembly到静态网站

上次的文章中,我们介绍了Blazor WebAssembly可以部署到静态文件服务器,而每个Github账户都可以使用GitHub Pages功能开一个自己的静态网站。

那么,不用花钱购买服务器,就可以将Blazor WebAssembly项目部署到GitHub Pages作为demo展示。

但是,你首先要踩过5个坑!

1.部署

可能有不熟悉部署流程的朋友,如果你了解,可以直接跳到第2部分。

1.1创建Github Pages

登录Github后,创建一个仓库,比如HelloBlazor

访问https://github.com/用户名/仓库名/settings/pages,为Source选择main分支并保存。

1.2生成发布文件

在Blazor wasm项目上点右键,选择“发布”,目标选择“文件夹”。

点击“发布”按钮,将项目发布到本地目录bin\Release\net5.0\browser-wasm\publish\

1.3上传网站

clone仓库到本地。由于可能要上传多个项目,所以每个项目建一个子文件夹。

创建Demo目录,将bin\Release\net5.0\browser-wasm\publish\wwwroot下的所有文件复制到Demo目录下。

推送本地文件到远程仓库。

1.4访问网站

使用https://用户名.github.io/HelloBlazor/Demo/即可访问网站。

你以为结束了?

不,下面才正式开始!

2.踩坑

2.1 所有资源文件404

现象

访问网站,提示An unhandled error has occurred.,使用浏览器开发者工具,发现所有资源文件无法访问,返回404错误:

解决

修改index.html:

<base href="/" />

改成

<base href="/HelloBlazor/Demo/" />

原理

默认是发布到网站根目录,需要指定成部署的根目录。

2.2 blazor.webassembly.js 404

现象

除了blazor.webassembly.js还是返回404错误,其他资源文件都能正常访问:

解决

在仓库根目录下添加一个空文件.nojekyll

原理

GitHub Pages默认基于Jekyll生成静态页面。而Jekyll将带有下划线的文件和目录认为是特殊资源,不予处理。

而blazor.webassembly.js位于带有下划线的_framework目录下,.nojekyll文件就是告诉GitHub不要忽略掉下划线开头的文件和文件夹。

2.3 Failed to find a valid digest in the 'integrity' attribute for resource

现象

已经没有404错误了,但是console窗口却有如下错误提示: 

解决

在仓库根目录下添加一个.gitattributes文件,内容如下:

* binary

删除Demo目录下所有文件,重新生成发布上传。

原理

当Blazor WebAssembly下载应用的启动文件时,会检查文件的SHA-256哈希值,确保不会出现加载不一致文件的风险。

但是,git在windows下会自动将文件中的换行符CRLF转成LF,这样就造成文件的哈希值变化。

.gitattributes文件就是告诉git当前都是二进制文件,不要处理。普通代码仓库慎用此配置

2.4 刷新页面后404

现象

现在,网站可以正常访问了。

但是当点击其他菜单后,刷新页面则会显示404页面: 

解决

在仓库根目录下添加一个文件404.html,文件内容如下:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><script type="text/javascript">var segmentCount = 2;var l = window.location;l.replace(l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') +l.pathname.split('/').slice(0, 1 + segmentCount).join('/') + '/?p=/' +l.pathname.slice(1).split('/').slice(segmentCount).join('/').replace(/&/g, '~and~') +(l.search ? '&q=' + l.search.slice(1).replace(/&/g, '~and~') : '') +l.hash);</script></head><body></body>
</html>

修改index.html,在<head>节下增加如下代码:

<script>(function (l) {if (l.search) {var q = {};l.search.slice(1).split('&').forEach(function (v) {var a = v.split('=');q[a[0]] = a.slice(1).join('=').replace(/~and~/g, '&');});if (q.p !== undefined) {window.history.replaceState(null, null,l.pathname.slice(0, -1) + (q.p || '') +(q.q ? ('?' + q.q) : '') +l.hash);}}}(window.location))
</script>

原理

/counter实际是前端路由地址,网站无法找到对应目录下的index.html文件,因此跳转到404页面。

而通过自定义404页面,可以检查当前URL,截取出网站根目录地址。

注意,这里我们设置了segmentCount = 2,因为对应站点有2级子目录。

路由将作为p参数的值,替换window.location跳转回网站首页。

index.html检查当前URL,如果包含p参数,则把p参数的值转换回路由地址。

2.5 开发环境所有资源文件404

现象

这回,网站终于真的可以正常访问了。

但是在开发环境调试时,所有资源文件返回404错误:

解决

修改index.html,在<head>节下增加如下代码:

<script>var base = document.getElementsByTagName('base')[0];if (window.location.hostname=='localhost') {base.setAttribute('href', '/');} 
</script>

原理

因为我们为了部署,改了根地址:

<base href="/HelloBlazor/Demo/" />

但是,调试环境又是基于网站根目录。

所以需要动态把它设置回来。

结论

人,总在不断踩坑中成长。

希望这篇文章,能帮助你避开一些坑,在成长的路上走得更快更远!

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML--使用XML来将字符串分隔成行数据

DECLARE xml XML SET xmlCAST(REPLACE(<ROOT><X>AA,AB,AC,AD</X></ROOT>,,,</X><X>) AS XML)SELECT T.C.value(.,varchar(20)) AS Result FROM xml.nodes(/ROOT/X) T(C) 取前几条记录&#xff0c;如10,102,10254,103265,541,2154,41,156中…

关于所谓的穷人富人幸福论

穷人把自己的失意与落魄藏在自己的内心深处&#xff0c;把拿到手上的一点点蝇头小利挂在嘴边。穷人展示出来的他们的笑脸&#xff0c;却掩饰不住他们内心伤痛的事实。富人把自己的得意与成功完全抛在一边&#xff0c;然后玩自虐似的把自己的一点点小伤痛挂在嘴边。外人只能看到…

做题不如巧做题,初中数学题型解题技巧都在这!

▲ 点击查看今天&#xff0c;小天就为大家整理了初中数学各类题型解题技巧。我们一起往下看哦。1.数形结合思想根据数学问题的条件和结论之间的内在联系&#xff0c;既分析其代数含义&#xff0c;又揭示其几何意义&#xff1b;使数量关系和图形巧妙和谐地结合起来&#xff0c…

php 获取对象所有成员变量,PHP成员变量获取对比

有如下4个代码示例&#xff0c;你认为他们创建对象&#xff0c;并获得成员变量的速度排序是怎样的&#xff1f;1&#xff1a;将成员变量设置为public&#xff0c;通过赋值操作给成员变量赋值&#xff0c;直接获取变量class Foo { public $id; } $data new Foo; $data->id…

32位应用程序单个进程最大占用内存是4GB

32位应用程序单个进程最大占用内存是4GB左右&#xff0c;这个问题是因为需要测试大数据里才能体现出来的问题&#xff0c;所以反反复复花了一周多的时间来搞定它&#xff0c;希望大家在对它有一个印象。64位的应用程序的时候就不会有这个限制。所以这种情况下请编译成64位的程序…

【Blog.Core开源】快速升级.NET 6.0

BCVP只要贡献&#xff0c;就不分大小&#xff0c;每个人都是这个时代最璀璨的星&#xff01;一个以开源项目主导的社区组织。《Blog.Core》开源项目已经3年&#xff0c;期间收获了很多很多&#xff0c;同时也收到了很多小伙伴的支持和鼓励&#xff0c;才使得我有足够的心力从2.…

全网爆红!全新洗脑神曲:程序员Disco

作曲 : 宝石gem作词 : 宝石gem作词改编&#xff1a;云信刘亦菲产品&#xff1a;这个需求明天就得实现开发&#xff1a;至少2周产品&#xff1a;就3天&#xff0c;是不是干不了开发&#xff1a;开玩笑&#xff0c;加班也要1周多产品&#xff1a;4天&#xff0c;有啥困难我帮你跟…

SiteMapCreator 发布 (Open Source)

Site Map Creator (Open Source) Introduction Site Map是asp.net里面很方便的一个站点导航的控键。使用它&#xff0c;只需要简单的配置一下xml文件&#xff0c;就能够控制页面流。但是用手去编写SitMap的xml文件实在太麻烦了&#xff0c;因此我写了这个小软件&#xff0c;并…

eclipse默认编码为GBK,修改为UTF8的方法

2019独角兽企业重金招聘Python工程师标准>>> eclipse 默认编码居然是GBK&#xff0c;js文件默认编码是ISO-....怎么可以这样呢&#xff1f;都修改成UTF8的方法&#xff1a;1、windows->Preferences...打开"首选项"对话框&#xff0c;左侧导航树&#x…

php中页面平滑回到顶部代码,原生JS实现平滑回到顶部组件_javascript技巧

返回顶部组件是一种极其常见的网页功能&#xff0c;需求简单&#xff1a;页面滚动一定距离后&#xff0c;显示返回顶部的按钮&#xff0c;点击该按钮可以将滚动条滚回至页面开始的位置。实现思路也很容易&#xff0c;只要改变document.documentElement.scrollTop或document.bod…

在Word XP中也能插入国际音标、拼音

在wps2000 中可以轻松地插入国际音标和汉语拼音&#xff0c;但是利用它输入的汉语拼音和国际音标只能够在WPS2000中打印输入&#xff0c;无法到别的软件中进行再编辑。同时尽管Word XP具有符号插入的功能&#xff0c;但是无论如何都找不到国际音标和汉语拼音&#xff0c;不过&a…

数学有多震撼?!我真的没有在开车!

让我们来欣赏一下日本高校欧派函数&#xff08;おっぱい関数&#xff09;对抗大赛中的作品吧。埼玉大学&#xff08;理学部&#xff09;其中 明治大学広島大学&#xff08;理学部&#xff09;東京農業大学其中 是一个可调常数&#xff0c;下图中p3。文教大学京都大学其中首都大…

一些微服务拆分的浅见

大家好&#xff0c;我是Z哥。不管是十几年前 SOA 的流行&#xff0c;还是 7、8 年前微服务的大行其道&#xff0c;还是如今云原生的展露锋芒&#xff0c;背后都离不开一件事&#xff0c;程序拆分或者说服务拆分。否则&#xff0c;一个单体应用&#xff0c;以上的这些技术潮流好…

centos 6.0安装杀毒软件clamAV 0.98

1、查看系统版本[rootlocal]# lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarchDistributor ID: CentOSDescription: CentOS release 6.4 (…

php post api json数据,php – REST API:请求身份为JSON或纯POST数据?

POST&#xff0c;PUT&#xff0c;GET都是HTTP动词&#xff0c;并且本身并不表示传输数据的格式&#xff0c;因此没有POST格式。这意味着您可以按照您选择的任何方式对数据进行编码。现在&#xff0c;你决定采用什么样的格式&#xff0c;真的应该是一个API通常被使用的问题。如果…

命令行下的mysql的基本操作

1.登录数据库 MySQL -h localhost -u root -p Enter password:**** 如果信息正确&#xff0c;出现数据库名字 2.关闭MySQL net stop MySQL 关闭 net start MySQL 启动 3.登录成功后&#xff0c;显示当前数据库已有数据 show database&#xff1b; 4.建立数据库 drop database i…

大变天!刚刚,山东突然宣布!关乎800万人...

全世界只有3.14 % 的人关注了青少年数学之旅由山东省大数据局主办、青岛市大数据发展管理局承办的山东省数据应用&#xff08;青岛&#xff09;创新创业大赛自9月23日启动以来&#xff0c;凭借着新颖赛题、丰富数据和丰厚奖励&#xff0c;吸引了社会各界数据爱好者与从业者的广…

MassTransit中RequestResponse基本使用

MassTransit 是一个自由、开源、轻量级的消息总线基于.Net框架, 用于创建分布式应用程序。方便搭建基于消息的松耦合异步通信的应用程序和服务。MassTransit 在现有消息传输上提供了一组广泛的功能, 从而使开发人员能够友好地使用基于消息的会话模式异步连接服务。基于消息的通…

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

今天项目展示&#xff0c;但是有些数据不是特别规范&#xff0c;我就直接使用Toad去操作数据库中的数据。结果在修改某一张表的时候就出现了上述错误&#xff0c;表示十分无奈。 出错原因分析&#xff1a; 首先执行如下语句&#xff1a; SELECT sid, serial#, username, osuser…

php2612,达人曝光LGLSNJ2612AR质量好吗?怎么样呢?体验报告揭秘

其实这个LGLSNJ2612AR还可以的 哟&#xff0c;超凡的造型设计和外观&#xff0c;做工细腻&#xff0c;不少的人想要了解这LGLSNJ2612AR怎么样&#xff1f;质量好不好&#xff1f;实实在在的说这款LGLSNJ2612AR使用体验后个人感觉蛮可以的哈&#xff0c;刚购没多久的&#xff0c…