2017-10-20 1 views
1

때로는 내 시스템이 GET 유형으로 공격하고 때로는 POST 유형으로 공격합니다. [HttpPost] 속성으로 내 메서드를 꾸미면 Json 결과를 반환하는 동안 JsonRequestBehavior.AllowGet을 사용해야하나요?[HttpPost] 속성과 함께 JsonRequestBehavior.AllowGet을 사용할 수 있습니까?

예 :

 [HttpPost, ValidateAntiForgeryToken, Authorize] 
     public ActionResult AssociatedDevices(long id, [DataSourceRequest] DataSourceRequest request) 
     { 
      var dataParameters = request.ToDataParameters(); 
      var deviceSetLogic = new DeviceSetLogic(); 
      var associatedDevices = deviceSetLogic.GetAssociatedDevicesByDeviceSetId(id, dataParameters); 

      var result = new DataSourceResult() 
      { 
       Data = associatedDevices, 
       Total = Convert.ToInt32(dataParameters.TotalRecordCount) 
      }; 

      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

내가 위에서 PROD 환경에서 같이 작성하는 경우는 어떤 문제가 발생할 것인가? 제발 조언.

+3

로 장식한다, 당신은'JsonRequestBehavior.AllowGet'를 사용할 필요가 없습니다. PROD로 배송하기 전에 현지에서 테스트하지 않는 이유는 무엇입니까? – Shyju

+0

이후 환경에서 예외가 발생했습니다. 'System.Web.HttpException 'AdminSite.Web.Controllers.EntitlementsSearchController '에서 공용 작업 메서드'AssociatedDevices '을 (를) 찾을 수 없습니다.' 그러나이 오류는 localhost에서 재현 할 수 없습니다. 시스템이 POST 대신 GET 유형을 사용하여이 오류를 발생시키는 곳입니다. –

답변

1

반환 값에 JsonRequestBehavior.AllowGet 매개 변수 추가하기 사용자의 메서드가 [HttpPost]으로 꾸며 졌으므로 Json은 GET 동사를 사용하여 호출 할 수 없기 때문에 아무런 쓸모가 없습니다. 당신은 가끔 시스템이 "GET으로 명중 때로는 게시물"하지만 당신은 GET 요청을 사용하여이 메서드를 호출하려고하면 라우팅 시스템이 가장 가능성있는 방법이 존재하지 않는 404

을 얻을 것이다라고

메서드가 GET 요청에 응답하므로 JsonRequestBehavior.AllowGet을 추가하면 코드가 명확하지 않게됩니다. 액션이 POST와 GET 동사를 사용하여 reachabe해야하는 경우 귀하의 방법은`HttpPost` 속성으로 장식되어있는 경우

은, 그것은 [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)] 또는 [AcceptVerbs("Get", "Post")]

+0

그렇다면 AcceptVerbs (HttpVerbs.Get | HttpVerbs.Post)로 장식하면 Json 결과에서이 JsonRequestBehavior.AllowGet을 사용할 수 있습니까? –

+0

답변을 업데이트했습니다. 귀하의 의견에 대답 : 예 – Wndrr

+0

upvote 주셔서 감사합니다. 귀하의 질문에 답변이 있으면 그 것으로 표시하십시오. – Wndrr

관련 문제