WebSharper Remoting实战指南如何用一个Remote标注实现零样板的异步调用【免费下载链接】coreWebSharper - Full-stack, functional, reactive web apps and microservices in F# and C#项目地址: https://gitcode.com/gh_mirrors/core113/coreWebSharper是一个用于构建全栈Full-stack、函数式、响应式 Web 应用的 .NET 框架支持 F# 和 C#。它的Remoting机制堪称零样板远程调用的典范你只需在服务端函数上加一个Remote标注浏览器端就能像调用本地函数一样发起异步请求——序列化、HTTP 传输、CSRF 防护、响应反序列化全部由框架自动完成 什么是 WebSharper Remoting传统做法中实现一次前端调后端通常需要手写 REST 接口、前端定义 API 封装、手动 JSON 序列化/反序列化、处理跨域与 CSRF……这些样板代码在 WebSharper 中一行都不用写。Remoting 的工作原理非常直接环节传统方式WebSharper Remoting接口定义手写 Controller/APIRemote标注函数客户端调用手写 fetch/axioslet! x Server.f4 8如同本地调用数据序列化手动 JSON 转换编译器自动生成JSON 格式安全机制自己实现内置 CORS CSRF Token 校验简单说一次标注双端共享类型安全的异步通信。快速上手三步完成远程调用1️⃣ 在服务端函数上加标注在 F# 中给任意函数加上Remote特性即可标注可带自定义路径方便区分同名函数module Server [Remote] let f4 (x: int) async { return x 1 }C# 中使用[Remote]特性用法完全对等参考 Remoting.cs 中的 C# 示例。2️⃣ 注册实例级处理器按需模块级函数直接可用若远程方法是类或接口的成员则需通过AddRpcHandler注册实现实例或在 AspNetCore 中用AddRemotingHandler见src/sitelets/WebSharper.AspNetCore/Services.fs。3️⃣ 在浏览器端直接调用let! result Server.f4 8 // 浏览器中执行 → 返回 9客户端默认通过AjaxRemotingProvider发起 XHR 请求支持Sync、Async、Task、Send四种模式定义于src/stdlib/WebSharper.StdLib/Remoting.fs。5 种进阶玩法解锁更多可能 以下能力在测试项目tests/WebSharper.Web.Tests/Remoting.fs中均有真实用例自定义路由路径Remote Server/f3Alternate避免同名方法冲突接口级远程代理RemoteServer.Handler.M3 40直接调用抽象成员记录类型作为远程函数包把多个Remote函数装入记录统一RemoteMyRecord.R1 ...用户会话集成远程函数内可调用Web.Remoting.GetContext()登录/登出/获取当前用户自定义传输层用RemotingProvider标注替换默认 Provider轻松接入 gRPC 或日志中间件可传输的数据类型几乎覆盖 .NET 日常类型元组、联合类型、记录、Map/Set、DateTime、枚举、匿名记录、结构体甚至 F# 的Async计算表达式返回值都会被自动适配。源码解读一个标注背后发生了什么 核心实现分布在三个模块值得新手重点阅读特性定义RemoteAttribute标记可远程调用的服务端函数src/compiler/WebSharper.Core/Attributes.fs编译器据此在元数据中登记远程方法并阻止这些代码被编译进客户端服务端引擎WebSharper.Core.Remoting模块中的Server类型负责路径匹配、参数 JSON 解码、方法反射调用与结果编码Async/Task返回值由适配器自动展开src/compiler/WebSharper.Core/Remoting.fsWeb 安全层RpcHandler在每次请求前执行 CORS 与 CSRF Token 校验src/sitelets/WebSharper.Web/RpcModule.fs客户端的默认 XHR 实现会自动附带x-csrftoken请求头src/stdlib/WebSharper.StdLib/Remoting.fs请求链路示意浏览器 Server.f4 8 → JSON 编码 [8] → XHR POST附 CSRF 头 → 服务端路由匹配 校验 → 反射调用 → JSON 编码结果 → 浏览器自动解码 → let! x 9 ✅如何验证你的远程调用项目自带了完整的 Remoting 测试套件tests/WebSharper.Web.Tests/Remoting.fs覆盖unit→unit、int→Asyncint、记录、集合、登录登出等 40 余种场景。建议新手直接跑通它git clone https://gitcode.com/gh_mirrors/core113/core # 进入仓库后执行 node runtests.js测试基于 QUnit 在浏览器中运行如文首截图所示远程调用测试会真实地经过浏览器 → 服务器 → 浏览器全链路结果一目了然。小结你的需求WebSharper Remoting 的答案不想写 API 样板代码Remote一个标注搞定担心类型不匹配双端共享 .NET 类型编译期检查担心安全性内置 CORS/CSRF默认 HTTPS 切换想自定义传输RemotingProvider标注轻松替换一句话总结WebSharper Remoting 把异步客户端-服务器调用变成了本地函数调用的书写体验这正是它作为 F#/C# 全栈框架的核心竞争力之一。上手只需三步进阶空间却在源码中等你探索 ✨【免费下载链接】coreWebSharper - Full-stack, functional, reactive web apps and microservices in F# and C#项目地址: https://gitcode.com/gh_mirrors/core113/core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考