Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当图像url空间编码为+;_C#_Asp.net Core - Fatal编程技术网

C# 当图像url空间编码为+;

C# 当图像url空间编码为+;,c#,asp.net-core,C#,Asp.net Core,我将URL存储在数据库中,其中空格编码为+。 当浏览器请求这些URL时,web服务器返回404响应。 这些URL都用于存储在wwwroot文件夹中的web服务器上的静态图像。 如果我手动更改+的%20,则图像将正确返回 这是ASP.Net核心中的故意更改还是一个bug? 如果这是故意的,那么对我来说,检查数据库并重新编码所有URL将是非常痛苦的,其中许多URL都嵌入到HTML片段中(我知道在数据库中存储HTML或在图像文件中使用空格不是一个好主意,但在我加入公司之前很久就已经这样做了,我们已经处

我将URL存储在数据库中,其中空格编码为
+
。 当浏览器请求这些URL时,web服务器返回404响应。 这些URL都用于存储在wwwroot文件夹中的web服务器上的静态图像。 如果我手动更改
+
%20
,则图像将正确返回

这是ASP.Net核心中的故意更改还是一个bug? 如果这是故意的,那么对我来说,检查数据库并重新编码所有URL将是非常痛苦的,其中许多URL都嵌入到HTML片段中(我知道在数据库中存储HTML或在图像文件中使用空格不是一个好主意,但在我加入公司之前很久就已经这样做了,我们已经处于这种状态)

我正在使用ASP.NET2.1,运行在.NETFramework上。 目前(在开发过程中)它正在通过IIS Express运行,但将与完整的IIS一起部署

我看到了其他的问题,但它是专门针对API调用的,答案似乎不适用于我的问题,因为在我请求静态图像文件时,没有任何更改路径

编辑:额外细节 使用
@html.Raw(html)
向浏览器输出的结果html格式如下

Html是在服务器上生成的,然后存储在数据库中,因此我们可以确信输出到浏览器是安全的。不,我不知道为什么有人会这样做,而不是在需要的时候构建Html,但这是在我的时代之前,这是我已经遇到的情况

更新: 我已经对此进行了深入研究,如果我输入
http://localhost:8000/BorderThemes/grey+4px+rounded+corners_TL.png
进入我的web浏览器,我从IIS获得一个页面,显示Http错误404.11,表示我的URL是双重编码的,并链接到以获取更多信息。这确实包括关于如何允许双重编码的说明,但警告可能会产生安全后果。 如果我输入url
http://localhost:8000/BorderThemes/grey%204px%20rounded%20corners_TL.png
我得到了一张照片

我对数据库中存储的path/html有问题,但经过实验后,似乎
System.Net.WebUtility.UrlEncode
将空间编码为
+
。例如
WebUtility.UrlEncode(“foo-bar.png”)
返回
foo+bar.png
,IIS拒绝将其作为双重编码


我是否遗漏了一些东西,或者Microsoft的URL编码功能是否以Microsoft web服务器拒绝的方式对URL进行编码?

如果您希望
%20
而不是
+
尝试使用
转义字符串
对URI进行编码:

Uri.EscapeDataString(someString);
提及

但是您已经生成了url&现在不能做任何事情了,所以请尝试使用类似HTML的代码

System.Net.WebUtility.HtmlDecode.HtmlDecode(html);
我不确定是否最好与
Raw
一起使用,或者在
@Html
中存在类似
decode
的方法,但请尝试使用:

@Html.Raw(System.Net.WebUtility.HtmlDecode(html))
参考:


在决定是否是bug之前,可以使用代码示例;“如何”和你的用法很重要。我更多地来自web表单世界,但在某些地方我习惯于调用UrlEncode()函数。@Phill-我添加了额外的细节-在生成页面时没有进行编码,它是以前编码并存储在数据库中的(通常是多年前)。我只需要将代码片段作为页面的一部分输出。您需要防止生成
+
符号。如果数据库包含这些
+
s,则需要删除它们。特别是不要使用
UrlEncode()
!为了获得进一步的帮助,(1)显示
html
变量是如何填充的,(2)显示
html
变量是如何在Razor代码中使用的。@Peter B-我的问题是我没有编码任何东西,它在很多情况下是多年前编码的,并存储在数据库中。解析所有存储的HTML代码片段并重新编码是我宁愿避免的事情。修复它可能是您唯一的选择。如果数据不正确,则需要修复,要么使用数据库脚本修复一次,要么在您的C#代码每次请求时修复一次。尝试使用
System.Net.WebUtility.UrlDecode()
,有关更多信息,请参阅。