繁体   English   中英

带有Url.Content助手的Razor在URL中的空格处结束引号

[英]Razor with Url.Content helper is ending quotes at space in URL

我将ASP.NET Core 2与Razor结合使用,以尝试通过ViewModel将图像URL传递到View中。 不幸的是,图像URL中有空格,目前我无法控制。

我有一个这样的文件名(注意空格):

https://example.com/images/file name.jpg

我正在使用Razor尝试显示如下图像:

<img src=@item.ImageUrl />

输出的HTML看起来像这样:

<img src="https://example.com/images/file" name.jpg />

显然这不会做! 我应该提到,当我们使用文件名中没有空格的图像时,这一切都知道。 这是我尝试解决此问题的一些方法:

在Razor中使用Url.Content帮助程序(这没​​有什么不同):

<img src=@Url.Content(item.ImageUrl) />

在填充ViewModel时使用System.Web.HttpUtility.UrlEncode (这会导致“双重编码”错误):

myViewModel.ImageUrl = HttpUtility.UrlEncode(someUrl);

我的目标是使URL正确编码(在输入字符串的空格中没有“ double-encoding”并且不被截断)。 我怎样才能实现这个目标?

问题是Razor会尝试创建有效的HTML,因此当看到空格时,它将自动关闭引号,因此:

@{string img = "a a.jpg";}
<img src=@img />

获取呈现为

<img src="a "a.jpg /> // of course invalid

因此,您需要确保添加引号,然后Razor会使用它们:

<img src="@img" />

哪个被渲染为

<img src="a a.jpg" />

你可以试试

<img src="@Html.Raw(item.ImageUrl)" />

但我同意,从长远来看,使用无效的URL(带空格)似乎不太有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM