MVC5 프로젝트에서 웹에서 비슷한 예제로 AJAX 호출을 사용하려고했지만 오류가 발생할 때마다 antiforgerytoken, 500 등이 발생합니다. 적절한 AJAX 호출 메소드가 있습니다. 필요한 모든 속성을 갖고 View에서 Controller Action으로 모델 데이터를 보내는 Controller Action 메서드가 있습니다. 여기 내가 사용하는 방법은 다음과 같습니다MVC5에서 AJAX 호출 사용
보기 :
@using (Html.BeginForm("Insert", "Account", FormMethod.Post, new { id = "frmRegister" }))
{
@Html.AntiForgeryToken()
//code omitted for brevity
}
<script>
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
$('form').submit(function (event) {
event.preventDefault();
//var formdata = JSON.stringify(@Model); //NOT WORKING???
var formdata = new FormData($('#frmRegister').get(0));
//var token = $('[name=__RequestVerificationToken]').val(); //I also tried to use this instead of "AddAntiForgeryToken" method but I encounter another error
$.ajax({
type: "POST",
url: "/Account/Insert",
data: AddAntiForgeryToken({ model: formdata }),
//data: { data: formdata, __RequestVerificationToken: token },
//contentType: "application/json",
processData: false,
contentType: false,
datatype: "json",
success: function (data) {
$('#result').html(data);
}
});
});
</script>
컨트롤러 : 코드 antiforgerytoken 또는 유사한 문제로 인해이 작업 방법에 공격 할 수 없다.
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public JsonResult Insert(RegisterViewModel model)
{
try
{
//...
//code omitted for brevity
}
}
MVC5의 CRUD 작업에 사용할 수있는 적절한 AJAX 및 Action 메소드가 필요합니다. 어떤 도움을 주시면 감사하겠습니다. UPDATE
: 여기 내가 명확히해야하는에 대한 몇 가지 포인트입니다 :
1) 우리는 "__RequestVerificationToken"를 사용하지 않았고 우리가 제대로 컨트롤러로 전송하면 나는 확실하지 않다 (이 보인다 파이어 버그의 요청 헤더에 쿠키로 존재하지만 괜찮은지 확실하지 않습니다.) 어떤 생각?
2) var formdata = new FormData ($ ('# frmRegister'). get (0))를 사용해야합니까? 파일을 업로드 할 때?
3)이 시나리오에서 processData 및 contentType을 사용하지 않는 이유는 무엇입니까?
4) 컨트롤러 메소드와 AJAX 메소드의 오류 부분이 정상입니까? 아니면 거기에 빠진 부분이 있습니까? 다음 중 하나 new FormData($('#frmRegister').get(0))
를 사용하거나, 뷰에서 모델이 RegisterViewModel
하고 올바르게 강하게 HtmlHelper
방법을 입력 사용하여 양식 컨트롤을 생성 한 경우
'var formdata = new FormData ($ ('# frmRegister') .get (0));'는 위장 방지 토큰을 포함합니다. 당신이 필요로하는 것은'data : formdata '입니다. 왜'FormData'를 사용하고 있습니까? (파일도 업로드하고 있습니까?) –