Что вызывает блокировку MVC JSON Get - периодически работает - PullRequest
2 голосов
/ 08 июня 2011

У меня есть метод JSON, который принимает запрос GET и возвращает объект JSON (не массив). Я знаю о JSON Hijacking и последствиях. Я прочитал пост Фила Хаака . Проблема в том, что метод работает 98% времени для GET и POST. В другой раз я записываю эту ошибку:

This request has been blocked because sensitive information could be disclosed to 
third party web sites when this is used in a GET request. To allow GET requests, set
JsonRequestBehavior to AllowGet.

Мой метод прост и принимает один целочисленный параметр ...

[Authorize]
public ActionResult MyMediaJSON(int? id) {
    <get data & return result>
}

Какие условия вызывают сообщение? Что нужно искать, когда я отлаживаю это?

1 Ответ

3 голосов
/ 08 июня 2011

Я только что посмотрел исходный код MVC, и он не соответствует тому, что вы говорите в своем вопросе.

Мне кажется, JsonRequestBehavior.DenyGet используется для всех результатов JSON по умолчанию. Следовательно, вы должны получать сообщение об ошибке каждый раз, когда пытаетесь вернуть JSON из контроллера, используя запрос GET (без указания JsonRequestBehavior.AllowGet).

Фактический контроль выполняется в JsonResult.ExecuteResult и выглядит следующим образом:

if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
    String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) {
    throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
}

Какие условия вызывают сообщение? Что нужно искать, когда я отлаживаю это?

Любые действия, которые вызываются через GET, который возвращает JsonResult без указания JsonRequestBehavior.AllowGet. (метод Json в контроллере использует JsonResult)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...