Я столкнулся с небольшой проблемой с моим веб-API в ASP.NET 4, используя С#. Я пытаюсь создать интерфейс GUI, который отправляет и получает данные через несколько веб-API. Причина наличия нескольких API связана с нашей сетью, которая состоит из нескольких безопасных зон. Серверы расположены в разных зонах, и простой запрос может проходить через 3 разных API.
В частности, я отправляю объект JSON из графического интерфейса в первый API. Предполагается, что объект JSON будет перенаправлен следующему API и следующему - и оттуда будет создан новый объект JSON, который будет возвращен по тому же пути.
Сам путь работает нормально. Проблема состоит в том, что объект JSON не может быть проанализирован, как только он возвращается в графический интерфейс. Я получаю строку JSON, заключенную в кавычки, по одному разу для каждого API.
Строка может начинаться так:
Hey! я am a string, or a JSON object of sorts!
Первый переход между API дает мне это:
"Hey! я am a string, or a JSON object of sorts!"
После следующего прыжка это выглядит так:
"\"Hey! я am a string, or a JSON object of sorts!\""
И к тому времени, когда мой GUI овладеет им, у нас будет что-то вроде этого:
"\"\\\"Hey! я am a string, or a JSON object of sorts!\\\"\""
Это где анализ не удается, по понятным причинам. Сам объект JSON правильно отформатирован, но все кавычки вызывают проблемы для синтаксического анализатора JSON.net (все кавычки внутри объекта также переносятся несколько раз).
До сих пор я пытался отправить запрос как тип application/json, так и text/plain тип. Оба сделали то же самое. API возвращает HttpResponseMessage, которые читаются с использованием ReadAsStringAsync(). Я также пытался избежать чтения строк и просто читал непосредственно из HttpRequestMessage в HttpResponseMessage и выполнял ReadAsStringAsync() только в графическом интерфейсе, но проблема все еще остается. Строка JSON создается с использованием JSON.nets Serialize() -method и помещается в HttpContent с помощью StringContent(). Это, кажется, делает работу правильно. Я считаю, что кавычки генерируются, когда API и GUI получает HttpResponseMessage.
Любая идея, как я могу отправить и получить строку JSON в виде необработанной строки, которая не рассматривается в любом случае?
Я могу обойти это поведение, анализируя объект в JToken или JObject в каждом API и снова сериализуя его. Однако это не очень хорошее решение - я бы предпочел, чтобы API просто отправлял сообщение именно так, как они его получили, и ничего с ним не делал. Я смотрел вперед, используя маршрутизацию, но там происходит много вещей авторизации, которые требуют, чтобы я использовал действие API, а не маршрут перенаправления.
Чтобы уточнить (TL;DR): Идеальным решением было бы для API просто передать сообщение без разбора или чтения чего-либо в него. Пока источник сообщения авторизован, запрос зашифрован и запрошенный URL-адрес действителен, само сообщение не имеет большого значения для каждого из "прокси" API.