2017-06-15 34 views
0

我有一個ASP .Net Core 1.1 MVC Web應用程序。當我將[ValidateAntiForgeryToken]裝飾添加到我的編輯/刪除/創建控制器時,頁面不會加載( HTTP 400錯誤)。任何想法爲什麼?我讀過一些地方,我必須添加一個相應的@ HtmlHelper.AntiForgeryToken到我的視圖,或類似的東西?但不知道該把它放在哪裏...但是,我也讀過,沒有必要在ASP .Net Core中執行此操作...ValidateAntiForgeryToken休息頁面

這是我的「用戶」編輯視圖的示例,控制器:

@model InspectionsData.Models.User 

@{ 
    ViewData["Title"] = "Edit"; 
} 

<h2>Edit</h2> 

<form asp-action="Edit"> 
    <div class="form-horizontal"> 
     <h4>User</h4> 
     <hr /> 
     <div asp-validation-summary="ModelOnly" class="text-danger"></div> 
     <div class="form-group" hidden> 
      <label asp-for="UserId" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="UserId" class="form-control" /> 
       <span asp-validation-for="UserId" class="text-danger"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label asp-for="FirstName" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="FirstName" class="form-control" /> 
       <span asp-validation-for="FirstName" class="text-danger"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label asp-for="LastName" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="LastName" class="form-control" /> 
       <span asp-validation-for="LastName" class="text-danger"></span> 
      </div> 
     </div> 
    </div> 
</form> 

<div> 
    <a asp-action="Index">Back to List</a> 
</div> 

謝謝

+0

你把這個屬性放在哪裏?因爲如果你把它放在返回表單的動作上,你會得到錯誤。它必須位於POST表單觸發的操作上。你可以將你的控制器代碼添加到問題中嗎? – juunas

回答

0

您需要將表格申報更改爲類似以下內容。

<form asp-controller="User" 
    asp-action="Edit" method="post" asp-antiforgery="true"> 

像你提到的asp-antiforgery="true"可以是可選的,但我喜歡隨時添加,以確保我表明我的意圖。這對我來說每次都適用。

希望這會有所幫助。

0

是的,你是對的。您不必在ASP.NET Core中手動添加AntiForgeryToken。

Form標籤輔助生成一個隱藏的請求驗證令牌到 防止跨站請求僞造

兩者(具有在HTTP POST操作方法的 [ValidateAntiForgeryToken]屬性使用時) from ASP.NET Core docs

說了這麼多,你確定你的動作對應於POST請求嗎?

另外指定Controller也是一個好主意。

<form asp-controller="Users" asp-action="Edit"> 

P.S:爲您的操作方法添加代碼有助於更快地解決問題。