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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:14:57