Подтвердить что ты не робот

ASP.NET MVC Чтение исходных данных JSON

Это сводит меня с ума. Я использую ASP.NET MVC. У меня есть контроллер с действием HttpPost, который действует как URL-адрес обратного вызова, который вызывается другим сервером (не под моим контролем). Я хочу динамически читать JSON, отправленные на него, не используя WebAPI или привязку к модели. У URL-адреса также есть параметр строки запроса, переданный ему.

URL-адрес обратного вызова выглядит примерно так:

http://domain.com/callback?secret=1234

Я пробовал читать размещенный ввод, используя:

[HttpPost]
public ActionResult Callback( String secret )
{
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd();

    // ...
}

Однако "jsonData" всегда является нулевым или пустым.

Я просто хочу получить размещенный ввод и вставить его в JsonFx, чтобы я мог динамически получать доступ к содержимому. Любые идеи о том, как сделать это самым простым способом?

UPDATE

Я обнаружил следующее...

В то время как вышеуказанное НЕ работает (jsonData будет пустым или пустым), следующее будет, если я сконфигурирую, какие маленькие параметры у меня есть на вызывающем сервере, чтобы опустить "секретный" строковый параметр запроса, который касается всех я может сделать с этой целью, поскольку это не мой сервер. В этом случае jsonData будет иметь правильную строку JSON:

[HttpPost]
public ActionResult Callback( /* String secret */ )
{
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd();

    // ...
}

Это очень неприятно для работы, и я не знаю простого способа принять строку запроса и опубликовать данные JSON на стандартном контроллере MVC.

У меня есть "контроллер обратного вызова" с методами Action, которые принимают различные данные (через GET, через форму POST, через JSON POST, через JSON POST с строкой запроса и т.д.) с разных сторонних серверов. Это ответные вызовы типа торговца, где я не контролирую форматы или методы, используемые для передачи информации. Мне просто нужно принять обратные вызовы и обработать информацию, которая должна быть там.

Все это отлично работает в моем контроллере, за исключением случая "JSON POST w/Query String".

Это выглядит (по крайней мере, для меня) как недостаток в стандартных ASP.NET MVC-контроллерах.???

Может ли кто-нибудь предложить решение для этого, которое может использоваться в стандартном ASP.NET MVC-контроллере?

4b9b3361

Ответ 1

Ваш первоначальный подход должен работать, если учесть тот факт, что привязка модели ASP.NET MVC уже прочитала поток, поэтому вы должны перемотать его:

[HttpPost]
public ActionResult Callback(string secret)
{
    Request.InputStream.Seek(0, SeekOrigin.Begin);
    string jsonData = new StreamReader(Request.InputStream).ReadToEnd();

    // ...
}

Ответ 2

Reset position до Zero перед чтением потока. Request.InputStream.Position = 0