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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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

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

一些微服务拆分的浅见

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

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

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

MassTransit中RequestResponse基本使用

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

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

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

vim编辑技巧

转载于:https://blog.51cto.com/ovcer/1353415

IT基础设施最佳实践ITIL

IT基础设施最佳实践ITIL1. 前言1.1.困扰问题随着IT技术在企业中的应用越广&#xff0c;企业业务流程的正常运作就越离不开IT部门的支持。IT在给企业业务带来效益的同时&#xff0c;也带来了成本和风险的 困扰&#xff0c;尤其是在某些特殊行业&#xff0c;例如电信、金融等行业…

一个本科生,只用了两年就拿下诺贝尔奖,拯救了无数糖尿病患者

全世界只有3.14 % 的人关注了青少年数学之旅早在三千五百年前&#xff0c;古埃及就已经有对糖尿病的描述&#xff0c;两千多年前&#xff0c;古希腊医生亚的阿勒特奥斯把这种主要症状为“排泄多且甜的尿液”的疾病命名为“Diabetes”&#xff0c;也就是糖尿病。几千年来&#x…

C#中使用jieba.NET、WordCloudSharp制作词云图

词云简介“词云”由美国西北大学新闻学副教授、新媒体专业主任里奇戈登&#xff08;Rich Gordon&#xff09;于2006年最先使用&#xff0c;是通过形成“关键词云层”或“关键词渲染”&#xff0c;对文本中出现频率较高的“关键词”的视觉上的突出。网上大部分文章介绍的是使用P…

js框架页弹出页面关闭

2019独角兽企业重金招聘Python工程师标准>>> <!-- lang: js --> function to(href) {if (top.location self.location) {//window.opener null;window.opener.location.reload();window.open(, _self);window.close();} else {window.location.href href;}…

狂言50年要拿30个诺奖的日本,如今怎么样了?

全世界只有3.14 % 的人关注了青少年数学之旅2019年10月9日&#xff0c;日本化学家吉野彰&#xff08;Akira Yoshino&#xff09;因在锂离子电池的发明和应用领域做出的卓越贡献&#xff0c;与美国科学家 John B. Goodenough、英国科学奖 M. Stanley Whittingham 一起荣获2019年…

VS2022+.NET6+C#10,.NET开发起飞

VS2022.NET6C#10一起体验是啥感觉&#xff1f;爽&#xff01;令人印象深刻的是VS2022打开超大项目的流畅&#xff0c;.NET6极致简化的MiniAPI框架&#xff0c;C#10各种炫酷新语法。看看下图的代码你能认识吗&#xff1f;来自.NET6的MiniAPI框架&#xff0c;直接在MapGet里面使用…

jdk8之lambda

2019独角兽企业重金招聘Python工程师标准>>> Oracle号称今年一定发布jdk8, 即使有bug, jdk8无疑最大的宠儿就是lambda表达式了&#xff0c;还是直接上代码&#xff0c;看看lambda表达式怎么了。 环境&#xff1a; openjdk8, eclipse4.3.1(支持jdk8编译) 实例代码&…

【转】Asp.Net中Excel操作权限的问题

近日在打开原来写的一个网页程序运行时&#xff0c;出现了Excel操作权限的问题&#xff0c;具体的说就是在代码中调用下面这段与Excel操作有关的语句时 Application curExcelApp new ApplicationClass(); 提示权限不足&#xff0c;具体的提示内容如下&#xff1a; 检索 COM 类…

Visual Studio 2022 预览版2 发布啦

我们很高兴地宣布 Visual Studio 2022 的第二个预览版发布啦&#xff01;预览版 1 是有史以来第一个 64 位 Visual Studio&#xff0c;提供了改进的可扩展性。从预览版 2 开始&#xff0c;我们专注于提供有关个人和团队生产力、现代开发和不断创新等主题的新功能。在本文中&…

批作业是小学老师的一大乐趣 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅