Pergunta

ASP.NET MVC 2.0 agora, por padrão, lançar uma exceção quando um tentativas de ação para retornar JSON em resposta a um pedido GET. Eu sei que isto pode ser substituído em um método de base método usando JsonRequestBehavior.AllowGet, mas é possível definir em um controlador ou base mais elevada (possivelmente o web.config)?

Atualização: comentário de Per Levi, é isso que eu acabei usando -

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
Foi útil?

Solução

Esta, como outras definições específicas da MVC, não é configurável através Web.config. Mas você tem duas opções:

  1. Substituir a sobrecarga Controller.Json (Object, String, Encoding) para chamar Json (Object, String, Encoding, JsonRequestBehavior), passando JsonRequestBehavior.AllowGet como o último argumento. Se você quer que isso se aplica a todos os controladores, em seguida, fazer isso dentro de uma classe abstrata controlador de base, em seguida, ter todos os seus controladores subclasse dessa classe abstrata.

  2. Faça um MyJson método de extensão (isto Controller, ...) que cria um JsonResult e define as propriedades adequadas, em seguida, chamá-lo de seu controlador via this.MyJson (...).

Outras dicas

Não há outra opção. Filtros uso de Ação.

Criar um novo ActionFilterAttribute, aplicá-lo em seu controlador ou uma ação específica (dependendo de suas necessidades). Isso deve ser suficiente:

public class JsonRequestBehaviorAttribute : ActionFilterAttribute
{
    private JsonRequestBehavior Behavior { get; set; }

    public JsonRequestBehaviorAttribute()
    {
        Behavior = JsonRequestBehavior.AllowGet;
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var result = filterContext.Result as JsonResult;

        if (result != null)
        {
            result.JsonRequestBehavior = Behavior;
        }
    }
}

Em seguida, aplicá-lo como este:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 bloco Json para solicitações GET por razões de segurança. Se você quiser substituir esse comportamento, veja a sobrecarga para JSON que aceita um parâmetro JsonRequestBehavior.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

Eu também tenho esse erro quando eu usar MVC 2.0 usando meu antigo código em MVC 1.0. Eu uso violinista para identificar a causa do erro. Veja os passos sobre como solucioná-lo usando Fidder -

http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON () -Será que-não-tirgger-the-callback-in-ASPNET-MVC-2. aspx

É este é o problema de segurança MVC2 estava tentando endereço? http://haacked.com/archive/2009/06/25/json -hijacking.aspx

Se assim for, parece que a vulnerabilidade é apenas um problema se você está tentando fazer uma chamada JSON para um site externo. Se seu aplicativo MVC2 está apenas fazendo chamadas JSON para seu próprio site (para jqgrids de preenchimento, por exemplo), você não deveria ser capaz de substituir com segurança a chamada JSON em seu controlador de base para permitir sempre get?

Apenas código mudança JSON de:

$.getJson("methodname/" + ID, null, function (data, textStatus)

para:

$.post("methodname/" + ID, null, function (data, textStatus)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top