البته راه دیگری هم پیدا کردم.
به نظرم جالب اومد.
ابتدا یک اکشن فیلتر تعریف شده و در ان هدر درخواست خوانده شده و با محتوی کوکی چک میشود در صورتی که برابر باشند عمل انجام خواهد شد با این تفاوت باید توکن در زمان ارسال در هدر درخواست قرار گیرد مانند زیر:
کد اکشن فیلتر:
public class ValidateJsonAntiForgeryTokenAttribute : ActionFilterAttribute
{
#region Methods (1)
// Public Methods (1)
/// <summary>
/// Called when [action executing].
/// </summary>
/// <param name="actionContext">The action context.</param>
public void OnActionExecuting(HttpActionContext actionContext)
{
try
{
var cookieName = AntiForgeryConfig.CookieName;
var headers = actionContext.Request.Headers;
var cookie = headers
.GetCookies()
.Select(c => c[AntiForgeryConfig.CookieName])
.FirstOrDefault();
var rvt = headers.GetValues("__RequestVerificationToken").FirstOrDefault();
AntiForgery.Validate(cookie != null ? cookie.Value : null, rvt);
}
catch
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Unauthorized request.");
}
}
#endregion Methods
}
سپس در اکشن دلخواه باید این اکشن فیلتر را بکار برد (در درخواستهای json)
[HttpPost]
//[ValidateAntiForgeryToken]
[ValidateJsonAntiForgeryToken]
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public virtual ActionResult DeletePhoto(int? id)
{
string ret="error";
if (id != null && id > 0)
{
bool result = _imageGalleryService.Value.Photos.Value.Delete(id.ToInt32());
ret = result ? "ok" : "nok";
}
return Content(ret);
//return Json(new { ret });
}
سپس در طرف ویو به صورت زیر عمل شود
$.ajax({
....
type: "POST",
url: '@Url',
data: JSON.stringify({ id: Id }),
contentType: "application/json; charset=utf-8",
// این قسمت اضافه شود
headers: { __RequestVerificationToken: $("input[name=__RequestVerificationToken]").val() },
dataType: "json",
..........
امیدوارم برای دوستان هم کاربرد داشته باشد