2016-01-10 145 views
0

我正在爲我的應用程序的服務器端使用microsoft asp.net mvc,並在客戶端使用jquery。 在我的應用程序中,我需要在加載特定頁面時做一些事情。我需要發送一個請求到服務器端並做一些事情。因爲我在客戶端這樣做,每個用戶都可以看到我的請求,我想確保提出請求的用戶不是請求特定頁面的用戶。到目前爲止,我使用請求僞造令牌,但我過去一個月跟蹤我的應用程序面臨的異常和錯誤,我看到所需的防僞cookie「myCookieName」不存在。首先如果有人能告訴我我的錯誤是什麼,其次如果有人能提出另一種解決方案。僅在頁面加載後才發送ajax請求

這是我的html代碼:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { id = "myForm" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(m=>m.Id) 
} 

這是我的Java腳本代碼:

(function() { 
$(function() { 
    var $form = $("#myForm"); 
    $form.ajaxSubmit({ 
     success: function() { 
      $form.remove(); 
     }, 
     error: function() { 
      $form.remove(); 
     } 
    }); 
}); 
}()); 

,這是我的MVC代碼:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public JsonResult Action(int id) 
    { 
     //Do stuff 
    } 

回答

0

您阿賈克斯不包括AntiForgery令牌

<script type="text/javascript"> 
    $('#myForm').submit(function() { 
     var $form = $('#myForm'); 
     var token = $('input[name="__RequestVerificationToken"]', $form).val(); 
     $.ajax({ 
      url: $(this).data('url'), 
      type: 'POST', 
      data: { 
       __RequestVerificationToken: token, 
       someValue: 'some value' 
      }, 
      success: function (result) { 
       alert(result.someValue); 
      } 
     }); 
     return false; 
    }); 
</script> 
+0

不,如果你看到我使用來自鏈接http://malsup.com/jquery/form/的jquery庫的ajaxSubmit,這個lib會自動將輸入從html發送到控制器。 TNX爲您的答案,但這不是我的問題。 – elhampour

相關問題