使用Url.Action生成URL时出现字符串构建错误
解决Url.Action生成URL时参数被编码的问题
这问题我太熟了!你现在的写法是把查询参数直接硬拼在Action名称里,Url.Action会把整个字符串当成Action的名字来处理,自然就把?、=这些特殊字符给URL编码成%3f、%3d了,这才导致生成的URL不符合预期。
直接给你正确的写法,用Url.Action的重载方法来传递路由参数,框架会自动帮你构建正确的查询字符串:
<button onclick="location.href='@Url.Action("SendRegisterLink", "Account", new { Email = item.Email })'"> 点击发送注册链接 </button>
为什么这个写法能行?
Url.Action的第三个参数是一个匿名对象,里面的每个属性都会被自动解析成URL的查询参数。框架会帮你完成:
- 正确拼接Action和Controller的路径
- 自动添加
?分隔符 - 把参数键值对格式化为
key=value的形式 - 仅对参数值里的特殊字符(比如
@)做必要编码,不会动?和=
举个复杂点的例子,如果有多个参数,同样适用:
@Url.Action("SendRegisterLink", "Account", new { Email = item.Email, UserId = item.Id, Source = "Admin" })
生成的URL会是:/Account/SendRegisterLink?Email=test@test.com&UserId=123&Source=Admin
再回头说你原来的写法问题
你之前写的@Url.Action("SendRegisterLink?Email="+ item.Email, "Account"),相当于告诉框架:我要调用的Action名称是SendRegisterLink?Email=test@test.com,框架自然会把这个字符串里的所有特殊字符都编码,结果就出现了那些奇怪的%3f、%3d,完全偏离了你的需求。
内容的提问来源于stack exchange,提问作者nosedive_89
相关产品推荐
相关产品推荐

