jTable에서 MVC5 컨트롤러로 CRUD를 호출 할 때 AntiForgeryToken을 어떻게 전달합니까? 작업을 완료하려면 오히려 안전하지 않은 ValidateAntiForgeryToken 부분을 주석 처리해야합니다. 그렇지 않으면 "서버와 통신하는 동안 오류가 발생했습니다."라는 메시지가 나타납니다. 메시지.jTable에서 MVC5로 CRUD 항목을 수행 할 때 위조 토큰을 전달하는 방법은 무엇입니까?
JTable의 코드 :
$(document).ready(function() {
//Prepare jtable plugin
$('#CandidateTable').jtable({
title: 'Candidates',
actions: {
listAction: '@Url.Action("List")',
deleteAction: '@Url.Action("Delete")',
updateAction: '@Url.Action("Edit")',
createAction: '@Url.Action("Create")'
},
fields: {
ID: {
key: true,
create: false,
edit: false,
list: false
},
FirstName: {
title: '@Html.DisplayNameFor(model => model.FirstName)',
width: '15%'
},
MiddleName: {
title: '@Html.DisplayNameFor(model => model.MiddleName)',
width: '15%'
},
LastName: {
title: '@Html.DisplayNameFor(model => model.LastName)',
width: '15%'
},
AnonymousID: {
title: '@Html.DisplayNameFor(model => model.AnonymousID)',
width: '15%'
},
Email: {
title: '@Html.DisplayNameFor(model => model.Email)',
width: '15%'
},
GUID: {
title: '@Html.DisplayNameFor(model => model.GUID)',
width: '15%',
create: false,
edit: false
}
}
});
//Load person list from server
$('#CandidateTable').jtable('load');
});
ASP.NET MVC 5 활동 만들기 :
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Create([Bind(Include = "FirstName,MiddleName,LastName,AnonymousID,Email")] Candidate candidate)
{
try
{
if (ModelState.IsValid)
{
candidate.GUID = System.Guid.NewGuid();
candidate.IsActive = true;
candidate.DateAdded = DateTime.Now.ToUniversalTime();
candidate.DateModified = null;
db.Candidates.Add(candidate);
db.SaveChanges();
return Json(new { Result = "OK", Record = candidate });
}
else
{
throw new Exception("Form is not valid! Please correct it and try again.");
}
}
catch (Exception ex)
{
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
return Json(new { Result = "ERROR", Message = ex.Message });
}
}
UPDATE :
내가 그것을 알아 냈어. 임의의 필드 (AFT)를 추가하고 @ HTML.AntiForgeryToken 출력에 사용자 지정 입력을 추가해야했습니다. 삭제는
$('#CandidateTable').jtable({
paging: true,
pageSize: 15,
sorting: true,
defaultSorting: 'LastName ASC',
title: 'Candidates',
actions: {
listAction: '@Url.Action("List")',
deleteAction: '@Url.Action("Delete")',
updateAction: '@Url.Action("Edit")',
createAction: '@Url.Action("Create")'
},
fields: {
ID: {
key: true,
create: false,
edit: false,
list: false
},
FirstName: {
title: '@Html.DisplayNameFor(model => model.FirstName)',
width: '15%'
},
MiddleName: {
title: '@Html.DisplayNameFor(model => model.MiddleName)',
width: '15%'
},
LastName: {
title: '@Html.DisplayNameFor(model => model.LastName)',
width: '15%'
},
AnonymousID: {
title: '@Html.DisplayNameFor(model => model.AnonymousID)',
width: '15%'
},
Email: {
title: '@Html.DisplayNameFor(model => model.Email)',
width: '15%'
},
__AFT__: {
create: true,
edit: true,
list: false,
input: function (data) {
return '@Html.AntiForgeryToken()';
}
}
}
내가 사용하는 해결책은 대개 위조 방지 토큰의 값을 사용하여 요청에 사용자 지정 헤더를 추가 한 다음 서버에서 확인하는 것입니다. 그러나 jTable을 사용하여이를 수행하는 방법을 잘 모르겠습니다. AJAX 예제를 사용하여 몇 가지 지침을 원한다면 알려주십시오. –
오, 아주 멋진 접근 방식. 내 방식은 조금 "해킹"을 느꼈다. 고맙습니다! – kcabrams
@kcabrams : 대답을 업데이트로 추가하십시오. –