2017-06-15 36 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:为您的操作方法添加代码有助于更快地解决问题。