You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向window.location.href传参失败,Razor取Azure AD用户值报错如何解决?

问题原因

两个报错都是Razor服务端渲染和客户端JS语法不匹配导致的:

  • 触发SyntaxError是因为@User.Identity.Name是服务端变量,渲染到前端时会直接输出对应的邮箱字符串,你没有给它加引号,渲染后的JS代码会变成var loggedUser = xxx@domain.com;,JS会把邮箱字符串当成未定义的变量解析,自然报语法错误。
  • 触发ReferenceError是因为去掉@之后,Razor不会再处理这段代码,服务端不会把它替换成实际的用户名,JS直接把User当成客户端变量查找,客户端根本没有这个变量,所以报未定义。

你之前在其他场景用同样方式传参正常,是因为那些场景你是直接把变量用在服务端渲染的Url.Action参数、HTML属性等位置,属于服务端直接处理的逻辑,不需要适配JS语法,所以不会出问题,本次是把服务端变量注入到客户端JS代码中,必须符合JS的语法规则。

解决方法

1. 快速修复

给Razor输出的内容套上引号,符合JS字符串的语法要求:

// 修改前
var loggedUser = @User.Identity.Name;
// 修改后
var loggedUser = "@User.Identity.Name";

2. 兼容性更强的修复

如果用户名包含引号、特殊符号,直接套引号还是可能触发语法错误,推荐用JSON序列化的方式输出,自动处理转义和引号:

var loggedUser = @Json.Serialize(User.Identity.Name);

ASP.NET Core 自带的Json.Serialize会自动把字符串处理成合法的JS字符串格式,不需要手动加引号,兼容性更好。

3. 可选优化

把参数拼接到URL之前最好做一次URL编码,避免特殊字符破坏参数结构:

window.location.href = url + "?custEmail=" + encodeURIComponent(loggedUser);

内容的提问来源于stack exchange,提问作者user4912134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:06:04