System.ArgumentException: недопустимые символы в пути. CGI-десериализация

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

Unhandled Exception: System.Exception: System.ArgumentException: Illegal characters in path.
at System.Security.Permissions.FileIOPermission.CheckIllegalCharacters(String[] str, Boolean onlyCheckExtras)
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)
at System.AppDomainSetup.VerifyDir(String dir, Boolean normalize)
at System.AppDomainSetup.get_ConfigurationFile()
at ibsnccgi.Options.ReadSettings()
at ibsnccgi.Options.ReadSettings()
at 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>

ОБНОВИТЬ:

Дальнейшее изучение проблемы приводит меня к этой статье: 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, поэтому он вызывает исключение System.ArgumentException.

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

В коде, который вы пометили как вызывающий это исключение, не указан path. Это настоящий код? Похоже, у вас указан неверный путь для вашего файла конфигурации? И если да, то при чем тут app.config?

Rufus L 16.11.2018 19:38

Мне тоже непонятно, зачем нужны теги для cgi, iis-8 и iis-10

Rufus L 16.11.2018 19:38

Потому что пути нет. Пример кода в любой части приложения вызовет это исключение. Его приложение CGI размещено в IIS. У меня есть IIS8 на сервере и IIS10 на локальном компьютере. На обоих вылетает аналогично.

Rincew1nd 16.11.2018 20:20

CGI? Серьезный? Почему нельзя просто использовать ASP.NET?

Lex Li 16.11.2018 21:30

Вот пример кода, который вызовет сбой. gist.github.com/rincew1nd/497328d6b5fd6f864c703739c85cb2eb

Rincew1nd 20.11.2018 16:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
504
0

Другие вопросы по теме