Blazor JS Interop 调用 Geolocation API 教程


在 Blazor 中调用 Geolocation API 需通过 JS Interop:J*aScript 封装 n*igator.geolocation 为 Promise 函数 getLocation,C# 使用 IJSRuntime.InvokeAsync 调用并匹配字段名,同时处理权限拒绝等错误场景。

blazor js interop 调用 geolocation api 教程

在 Blazor 应用中调用浏览器的 Geolocation API,需要通过 JS Interop 实现 J*aScript 与 C# 的双向通信。核心是用 J*aScript 获取位置,再把结果传回 .NET 方法——不能直接在 C# 中调用 n*igator.geolocation,因为它是纯前端 API。

准备 J*aScript 位置获取函数

wwwroot/js/site.js(或任意已引入的 JS 文件)中添加以下函数:

window.getLocation = async () => {
  return new Promise((resolve, reject) => {
    if (!n*igator.geolocation) {
      reject(new Error("Geolocation is not supported"));
      return;
    }
    n*igator.geolocation.getCurrentPosition(
      (pos) => resolve({
        latitude: pos.coords.latitude,
        longitude: pos.coords.longitude,
        accuracy: pos.coords.accuracy,
        timestamp: pos.timestamp
      }),
      (err) => reject(new Error(err.message))
    );
  });
};

这个函数返回 Promise,兼容 Blazor 的异步 JS Interop 调用。确保该 JS 文件已在 _Host.cshtmlindex.html 中正确引用。

在 Blazor 组件中声明 JS Interop 引用

使用 IJSRuntime 注入并调用 JS 函数。推荐在组件中按需调用,而非全局初始化:

  • 在 Razor 组件顶部注入服务:@inject IJSRuntime JSRuntime
  • 定义一个 C# 方法封装调用逻辑,例如:private async Task GetLocationAsync()
  • await JSRuntime.InvokeAsync<locationdata>("getLocation")</locationdata> 获取结构化数据

注意:需提前定义接收数据的 C# 类(如 LocationData),属性名必须与 JS 返回对象的 key 完全一致(区分大小写)。

定义匹配的 C# 数据模型

创建一个简单类用于反序列化 JS 返回值:

Getsound Getsound

基于当前天气条件生成个性化音景音乐

Getsound 212 查看详情 Getsound
public class LocationData
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double Accuracy { get; set; }
    public long Timestamp { get; set; }
}

Blazor 会自动将 JS 对象的字段映射到同名属性。如果字段名不一致(比如 JS 返回 lat),可用 [JsonPropertyName("lat")] 标记(需引用 System.Text.Json)。

处理权限与错误场景

用户可能拒绝定位权限,或设备无 GPS。应在 UI 中给出明确反馈:

  • @if (isLoading) { <p>正在获取位置...</p> } 显示加载状态
  • 捕获 JSException 并检查消息是否含 "denied"、"un*ailable" 等关键词
  • 提示用户手动开启浏览器定位权限(可附简短说明:地址栏左侧图标 → 允许)

不要假设调用一定成功——Geolocation API 是用户授权型 API,首次调用必然触发浏览器弹窗。

基本上就这些。关键点就三个:JS 侧封装好 Promise 化调用、C# 侧用 InvokeAsync<t></t> 接收、前后字段名严格对齐。不复杂但容易忽略大小写和权限流程。

以上就是Blazor JS Interop 调用 Geolocation API 教程的详细内容,更多请关注其它相关文章!


# 达州专业seo  # 如何处理  # 如何用  # 操作指南  # 首次  # 如何在  # 它是  # 学习seo导图  # 双龙大道网站建设招标  # 它在  # 推广买卖网站怎么做的好  # 一种新的推广网站的方法  # 行业网站优化方法  # 淄川互联网营销推广公司  # 镇江seo网站优化  # 青岛seo实战  # 荣昌区企业网络营销推广  # javascript  # 字段名  # 文档  # 关键词  # .net  # c#  # nas  # win  # ai  # 浏览器  # json  # git  # 前端  # js  # html  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Linux如何优化系统启动流程_Linux启动项优化方案  QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务  diskgenius分区工具如何设置Bios启动项  VS Code源代码管理(SCM)视图的进阶使用技巧  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  《下一站江湖2》心法融合技巧  Magento 2 产品保存事件中安全更新属性的最佳实践  德邦快递收费标准详解  Apple Music无故扣费引质疑  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  Win11怎么开启HDR_Windows 11显示器画质增强设置  PDF如何批量加注释_PDF多文件批注高亮操作教程  传统曲艺莲花落的表演形式是  excel怎么制作考勤表 excel考勤模板与函数公式讲解  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用  抖音评论无法发送如何修复 抖音评论功能操作指南  windows10怎么设置电源按钮_windows10按下电源键功能修改  b站怎么用微信登录_b站微信登录方法  在React中正确处理HTML input type="number"的数值类型  Go App Engine 项目结构与包管理深度指南  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  使用VS Code调试Python代码:从入门到精通  以下哪一项是古代兵书三十六计中的计谋  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  《糖豆》添加舞曲方法  windows10怎么开启wsl_windows10安装linux子系统教程  以下哪一个是适应长期护理制度发展而设立的新职业  《金山词霸》语音翻译方法  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  QQ网页版入口导航 QQ网页版在线访问通道  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  OTT月报 | 2025年9月智能电视大数据报告  金牛福袋获取攻略  qq音乐官方网站入口_qq音乐在线听歌网页版链接  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  什么是Satis,如何用它搭建一个私有的composer仓库?  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  繁花漫画使用教程  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  济南公交卡手机充值指南  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗? 

 2025-12-12

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.