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

在 Blazor 应用中调用浏览器的 Geolocation API,需要通过 JS Interop 实现 J*aScript 与 C# 的双向通信。核心是用 J*aScript 获取位置,再把结果传回 .NET 方法——不能直接在 C# 中调用 n*igator.geolocation,因为它是纯前端 API。
在 wwwroot/js/site.js(或任意已引入的 JS 文件)中添加以下函数:
window.getLocation = async () => {
return new Promise((resolve, reject) => {
if (!n*igator.geolocation) {
reject(new Error("Geolocati
on 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.cshtml 或 index.html 中正确引用。
使用 IJSRuntime 注入并调用 JS 函数。推荐在组件中按需调用,而非全局初始化:
@inject IJSRuntime JSRuntime
private async Task GetLocationAsync()
await JSRuntime.InvokeAsync<locationdata>("getLocation")</locationdata> 获取结构化数据注意:需提前定义接收数据的 C# 类(如 LocationData),属性名必须与 JS 返回对象的 key 完全一致(区分大小写)。
创建一个简单类用于反序列化 JS 返回值:
Getsound
基于当前天气条件生成个性化音景音乐
212
查看详情
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
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。