我的应用程序使用jQuery Ajax帖子来保存和更新记录。
我的所有帖子都使用JSON.stringify,如下所示:
jQuery.ajax({
url: '@Url.Content("~/Vendor/SaveProvider")/',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(
{
jsonProvider: ko.toJSON(appViewModel.provider),
jsonAddresses: ko.toJSON(appViewModel.addresses),
jsonContacts: ko.toJSON(appViewModel.contacts)
}),
我读到ASP.NET MVC附带了一个 ValidateAntiForgeryToken 过滤器用于控制器调用,但我找不到任何关于如何使用Jquery Ajax和JSON.stringify使其工作的资源...
所以,我想到了这个想法,想知道它是否可以......
我知道jQuery.Ajax允许你发送额外的头信息,所以我会这样做:
我的过滤器应如下所示:
public class ValidateAjaxSessionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["sessionlogid"] == null ||
filterContext.HttpContext.Request.Headers["sessionlogid"] != Session["sessionlogid"])
{
throw new ArgumentNullException("Invalid Request", new Exception());
}
}
}
这有意义还是有更好的方法来保护应用程序?
感谢您的帮助!!
答案 0 :(得分:0)
如果使用帖子
[Authorize]
[ValidateAntiForgeryToken]
如果是一个使用
[Authorize]
您也可以使用此自定义属性
public class HttpAjaxRequestAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
if (!controllerContext.HttpContext.Request.IsAjaxRequest())
{
throw new Exception("This action " + methodInfo.Name + " can only be called via an Ajax request");
}
return true;
}
}
Then decorate your action as below
[Authorize]
[HttpAjaxRequest]
public ActionResult FillCity(int State)
{
//code here
}