문제

ASP.NET MVC 2.0은 이제 기본적으로 GET 요청에 응답하여 조치가 JSON을 반환하려고 시도 할 때 예외를 던집니다. JSONREQUESTBEHAVIOR.ALKERGET을 사용하여 메소드별로 메소드별로 재정의 할 수 있지만 컨트롤러 또는 더 높은 기준 (Web.Config)을 설정할 수 있습니까?

업데이트 : Levi의 의견에 따라 이것이 내가 사용한 것입니다.

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
도움이 되었습니까?

해결책

이것은 다른 MVC 특정 설정과 마찬가지로 web.config를 통해 해결할 수 없습니다. 그러나 두 가지 옵션이 있습니다.

  1. 컨트롤러 (객체, 문자열, 인코딩) 오버로드를 대체하여 JSON (Object, String, Encoding, JsonRequestBehavior), 통과 JSONREQUESTBEHAVIOR.ALKERGET 마지막 주장으로. 이를 모든 컨트롤러에 적용하려면 추상 기본 컨트롤러 클래스 내부 에서이 작업을 수행 한 다음 모든 컨트롤러 서브 클래스를 추상 클래스로 두십시오.

  2. JSONRESULT를 생성하고 적절한 속성을 설정 한 다음 컨트롤러에서 호출하는 확장 메소드 MYJSON (이 컨트롤러 ...)을 작성하십시오.

다른 팁

다른 옵션이 있습니다. 액션 필터를 사용하십시오.

새로운 ActionFilterattribute를 만들고 컨트롤러 또는 특정 조치 (필요에 따라)에 적용하십시오. 이것은 충분해야합니다 :

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;
        }
    }
}

그런 다음 다음과 같이 적용하십시오.

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2는 보안상의 이유에 대한 요청을위한 JSON을 차단합니다. 해당 동작을 무시하려면 JSONREQUESTBEHAVIOR 매개 변수를 수용하는 JSON의 오버로드를 확인하십시오.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

MVC 1.0에서 이전 코드를 사용하여 MVC 2.0을 처음 사용할 때도이 오류가 발생했습니다. 피들러를 사용하여 오류의 원인을 식별합니다. Fidder를 사용하여 문제를 해결하는 방법에 대한 단계를 참조하십시오.

http://www.rodcerrada.com/post/2011/07/11/jquery-getjson()-does-not-tirgger-the-callback-in-aspnet-mvc-2.aspx

이것이 MVC2가 해결하려는 보안 문제입니까?http://haacked.com/archive/2009/06/25/json-hijacking.aspx

그렇다면 외부 웹 사이트로 JSON 전화를하려고하는 경우 취약점이 문제 일뿐입니다. MVC2 앱이 JQGRID를 채우기 위해 JSON 호출 만 자신의 웹 사이트에만 호출하는 경우 기본 컨트롤러의 JSON 호출을 안전하게 무시할 수 없어야합니까?

JSON 코드를 변경합니다.

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

에게:

$.post("methodname/" + ID, null, function (data, textStatus)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top