如何在ASP.NET MVC 5中保留含+号参数的URL图片引用?
在ASP.NET MVC 5中保留URL参数里的+号
这问题我之前做项目时碰到过,刚好能给你几个实用的解决思路——核心就是搞定浏览器把URL里的+号自动解码成空格的坑:
方法1:生成URL时主动编码+号(推荐)
最稳妥的方式是在生成图片URL时,把包含+号的参数值用URL编码转换成%2B(这是+号的标准URL编码),浏览器就不会把它当成空格处理了。
在MVC视图里可以这么写:
@{ // 假设你的参数值自带+号 var imageParam = "pic+2024"; // 对参数进行URL编码 var encodedParam = HttpUtility.UrlEncode(imageParam); // 生成图片请求的URL var imageUrl = Url.Action("GetImage", "Media", new { id = encodedParam }); } <!-- 引用图片 --> <img src="@imageUrl" alt="目标图片" />
这样生成的URL里,pic+2024会变成pic%2B2024,服务器端控制器接收参数时,ASP.NET会自动把%2B解码回+号,你直接用就行:
public ActionResult GetImage(string id) { // 这里id的值就是原始的"pic+2024" // 后续读取图片、返回流的逻辑... }
方法2:修改服务器配置(不推荐,有安全风险)
如果没法在生成URL时编码(比如是第三方传入的带+号的URL),可以修改IIS配置,让它不再把+号当成空格处理。
在项目的web.config里添加以下配置:
- 在
<system.web>节点下添加:
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
- 在
<system.webServer>节点下的<security>节点里添加(没有<security>就新建):
<security> <requestFiltering allowDoubleEscaping="true" /> </security>
⚠️ 注意:开启allowDoubleEscaping会带来安全隐患,可能让恶意用户提交特殊字符,所以除非万不得已,优先用方法1。
内容的提问来源于stack exchange,提问作者Joao Victor
相关产品推荐
相关产品推荐

