C# Querystring中的问号,Server.MapPath返回错误

C# Querystring中的问号,Server.MapPath返回错误,c#,asp.net,asp.net-mvc,query-string,server.mappath,C#,Asp.net,Asp.net Mvc,Query String,Server.mappath,我正在开发一个web应用程序。在这里,我将附件/上载存储在服务器物理目录中。上载的父文件夹可能包含特殊字符,如“?” URL示例 "~/ChapterFiles/Capgeminisdfsdf_BE CSE ?_CoverPic/CoverPic.jpg" 当我在这个URL上执行,Server.MapPath()时,我得到一个错误“路径中的非法字符。” 无法从文件夹名称中删除问号,因为它是要求的一部分。请提出一个解决方案,我需要紧急修复它 您需要在字符串前面使用@符号。如下 @"~/Chapt

我正在开发一个web应用程序。在这里,我将附件/上载存储在服务器物理目录中。上载的父文件夹可能包含特殊字符,如“?”

URL示例

"~/ChapterFiles/Capgeminisdfsdf_BE CSE ?_CoverPic/CoverPic.jpg"
当我在这个URL上执行,
Server.MapPath()
时,我得到一个错误
“路径中的非法字符。”


无法从文件夹名称中删除问号,因为它是要求的一部分。请提出一个解决方案,我需要紧急修复它

您需要在字符串前面使用
@
符号。如下

@"~/ChapterFiles/Capgeminisdfsdf_BE CSE ?_CoverPic/CoverPic.jpg"

您可以使用以下内容:

String absoluteDir = Server.MapPath("~");
String myRelativePath = "~/ChapterFiles/Capgeminisdfsdf_BE CSE ?  _CoverPic/CoverPic.jpg".Replace("/","\\");

String absolutePath = Path.Combine(absoluteDir,myRelativePath);

它会起作用的。我建议您为此函数编写一些单元测试。

使用
HttpServerUtility.UrlEncode
UrlDecode
对字符串进行编码/解码

。您当前形式的需求无法实现,并且没有“修复”。您需要重新考虑如何将URL映射到文件夹和文件名。

是否要替换该URL?我要处理查询字符串中的问号。无法替换,则它不会映射到服务器上的物理位置