【ASP.NET Core】在node.js上托管Blazor WebAssembly应用
由于 Blazor-WebAssembly 是在浏览器中运行的,通常不需要执行服务器代码,只要有个“窝”能托管并提供相关文件的下载即可。所以,当你有一个现成的 Blazor wasm 项目,没必要用其他语言重写,或者你不想用 ASP.NET Core 来托管(有些大材小用了),就可以试试用 node.js 来托管。
要实现这个不需要掌握什么新的知识,所以咱们直接开工干活。
首先,咱们做好 Blazor wasm 应用的开发。
dotnet new blazorwasm-empty -n Demo -o .
blazorwasm-empty 模板创建的项目只带一些基本代码和 Hello World,没有演示代码——无Counter无假天气预报。
然后,Program.cs 文件也可以精简一下。
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app"); await builder.Build().RunAsync();
#app 是CSS筛选器,即选择 id 为 app 的元素来呈现 Razor 组件。这个相信各位都懂。
为了更好地演示,咱们把 Index 组件改一下,加一点交互功能,以便后面可以验证 Blazor 是否正常启动。
@page "/" <h1>Hello, world!</h1>
<button @onclick="ClickMe">点这里中大奖</button>
<div>@Message</div> @code{
private string? Message{get;set;} void ClickMe()
{
int xx = Random.Shared.Next(100, 700);
Message = $"恭喜你获得{xx}万假钞!";
}
}
这个不复杂,就是点击一下按钮,然后生成个随机整数,并修改 Message 属性。处理 click 事件要注意加上 @,如果是 onclick 你只能用 js 去写,要想用 C# 来写代码,就得用 @onclick。
接着,试执行一下,保证没有错误,能正常运行。
现在,你打开 \bin\Debug\net7.0\wwwroot 目录,里面你看到有个 _framework 目录,这个目录就是我们要的。不过,这个体积太大,不适合。咱们将项目发布一下,这样体积会变小很多。
我们不需要 wwwroot 目录下的东东,把整个目录“咔嚓”掉(这里指的是项目中的 wwwroot 目录,不是输出目录的)。为了防止重新生成时有文件错误(一般不会),可以把 obj 和 bin 目录也删除。
执行发布命令。
dotnet publish -c PublishRelease
-c 参数也可以用 Release,差别不大。
另外新建一个目录,路径随便,不要有非英文字符(防止出错),比如这里我命名为 Server。把刚才发布的整个 _framework 目录复制到 Server 目录中。现在你可以关闭 Blazor 项目了,没它什么事了。
在 Server 目录下新建一个文件,叫 index.html。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<title>高级示例</title>
</head>
<body>
<div id="app">正在加载……</div>
<script src="_framework/blazor.webassembly.js"></script>
</body>
</html>
这里注意两处:
1、要有一个 id 为 app 的元素,它用来呈现组件。
2、<script> 要引用 blazor.webassembly.js 文件。
在 Server 目录下再新建一个文件,名为 app.js。这个用来写服务器主程序(js 代码)。
const url = require("node:url");
const path = require("node:path");
const http = require("node:http");
const fs = require("node:fs"); // 主机
const host = 'localhost';
// 端口
const port = 6748;
// MIME 映射
function getFileMap(fileExt)
{
switch(fileExt)
{
case ".js":
case ".mjs":
return "text/javascript";
case ".json":
return "application/json";
case ".htm":
case ".html":
return "text/html";
case ".css":
return "text/css";
case ".jpg":
case ".jpeg":
return "image/jpeg";
// 其他的自己看情况添加
default:
// 其余的如.dll、.gz等,就是二进制文件
return "application/octet-stream";
}
} http.createServer((request, response)=>
{
// 获取请求路径
let reqPath = url.parse(request.url).pathname;
// 去掉路径开头的“/”
let fileName = reqPath.substring(1);
// 如果空白,默认文件名 index.html
if(fileName.length === 0)
{
fileName = "index.html";
}
// 读取文件内容
fs.readFile(fileName, (err, data)=>{
// 如果出错
if(err)
{
// 直接回个404
response.writeHead(404, {"Content-Type": "text/html"});
}
else
{
// 获取文件扩展名,以决定MIME类型
let ext = path.extname(fileName);
let mimeType = getFileMap(ext.toLowerCase());
// 发送HTTP头
response.writeHead(200, {"Content-Type": mimeType});
// 发送正文
response.write(data);
}
// 这一行必须,结束响应消息
response.end();
});
})
.listen(port, host); console.log(`服务器:${host}:${port}`);
运行它,执行:node app.js。接着在浏览器中输入地址:http://localhost:6748。再验证 Blazor 应用程序是否成功启动。
如果看到随机数能正确生成,说明运行成功了。
【ASP.NET Core】在node.js上托管Blazor WebAssembly应用的更多相关文章
- 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
- ASP.NET Core 中的文件上传
ASP.NET Core上传文件 ASP.NET Core使用IFormFile来读取上传的文件内容,然后将数据写入到磁盘或其它存储空间. 添加FileUpload模型,用来接收上传的文件内容. pu ...
- ASP.NET Core 与 Vue.js 服务端渲染
http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...
- 深入浅出Node.js(上)
(一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟 ...
- node.js上除了Express还有哪些好用的web开发框架
老司机都有体会, 开发本身没有多难, 最纠结其实是最初的技术和框架选型, 本没有绝对的好坏之分, 可一旦选择了不适合于自己业务场景的框架, 将来木已成舟后开发和维护成本都很高, 等发现不合适的时候更换 ...
- ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.
在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...
- ASP.NET CORE 之 在IIS上部署MVC项目
与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel ...
- 【译】Asp.net core应用在 Kubernetes上内存使用率过高问题分析
原文:https://blog.markvincze.com/troubleshooting-high-memory-usage-with-asp-net-core-on-kubernetes/ ps ...
随机推荐
- 项目自动备份,oracle 自动备份
1 项目备份 变量的形式 定时任务不执行就都写成了绝对路径 #!/bin/bash # # 项目路径 /usr/local/tomcat-bjkjdx 备份文件路径/usr/local/ba ...
- Windows系统Redis集群搭建
一.参考网址 https://mp.weixin.qq.com/s/ImdEJTdAmCFJsT55rici0Q 二.Redis版本 注意:搭建windows版的redis集群,redis的版本需要5 ...
- webpack1.x 之配置的坑
一.静态资源目录改变(默认在dist下面) 默认: webpack配置 output: { path: path.join(__dirname, './dist'), filename: 'build ...
- 自己制作Switch大气层SDFile
️SWITCH SDFILE 每次吃灰之后,就想更新下系统,每次都得研究一遍... 决定好好研究下,发现不是很繁琐. SDFile有哪些文件组成! Atmosphere 任天堂Switch定制固件 H ...
- tex基础
Tex中输入空格以及换行 1. 使用\ 表示空格以及调整空格的大小quad空格 a \qquad b 两个m的宽度quad空格 a \quad b 一个m的宽度 ...
- 通过VS Code轻松连接树莓派
如果您正在使用树莓派作为开发平台,那么通过远程连接VS Code到树莓派是非常方便的一种方法.这样,您可以在Windows或macOS等计算机上开发和测试代码,而不必在树莓派上进行. 以下是通过VS ...
- HTML第四章作业
学生实践4.1.3 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8" ...
- activiti引擎的表结构(仅记录用)
act_hi_*:'hi'表示 history,此前缀的表包含历史数据,如历史(结束)流程实例,变量,任务等等.act_ge_*:'ge'表示 general,此前缀的表为全局通用数据,用于不同场景中 ...
- String类型时间与Date时间转换
1. String类型的时间转为DateTime public static Date transferString2Date(String s) { Date date = new Date(); ...
- Pytorch Chain-Rules
Derivative Rules \[\begin{aligned} &\frac{\delta E}{\delta w^1_{jk}}=\frac{\delta E}{\delta O_k^ ...