System.ArgumentException: недопустимые символы в пути. CGI десериализация - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть приложение IIS CGI C #, исходный код которого был утерян, поэтому я декомпилировал его, перестроил и разместил его новую версию.
После перестройки приложение вылетает при попытке десериализации файла JSON с настройками (с использованием System.Web.Extensions).Исключение:

Необработанное Исключение: System.Exception: System.ArgumentException: недопустимые символы в пути.
в System.Security.Permissions.FileIOPermission.CheckIllegalCharacters (String [] str, Boolean onlyCheckExtras)
в System.Security.Permissions.FileIOPermission.AddPathList (доступ к FileIOPermissionAccess, элемент управления AccessControlActions, String [] pathListOrig, логический checkForDuplicates, логическое значение needFullPath, логический copyPathList)
в System.SecmissionAerIOPIOPIIRIOPERIOPER, String [] pathList, логическое checkForDuplicates, логическое значение needFullPath)
в System.AppDomainSetup.VerifyDir (строковый каталог, логическая нормализация)
в System.AppDomainSetup.get_ConfigurationFile ()
в ibsnccadting.Os
в ibsnccgi.Options.ReadSettings ()
в ibsnccgi.Program.Main (String [] args)

Сбой кода в строке, которая выглядит следующим образом:

var serializer = new JavaScriptSerializer();
var bar = serializer.Deserialize<test>("{\"foo\":\"123\"}");

Приложение app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
</configuration>

UPDATE:

Дальнейшее изучение проблемы приводит меня к этой статье: https://blogs.msdn.microsoft.com/david.wang/2005/07/13/iis-6-prefixing-paths-with/
Проблема состоит в том, что приложение IIS CGI будет работать с некоторыми мерами безопасности, которые добавят префикс «\\? \» К путямэто приложение получит доступ во время выполнения.

Например:
Assembly.GetEntryAssembly (). CodeBase - это 'file: //? / C: /IIS/ibsnccgi/CGIExample/TestCGI.exe';
После замены всех неправильных символов это будет '\\? \ C: \ IIS \ ibsnccgi \ CGIExample \ TestCGI.exe';
Но '\\? \' Не является допустимой частью пути Windows, поэтому онthrow System.ArgumentException.

Моим решением было перейти на приложение ASP.NET со ссылкой на старый проект.

...