ASP.NET MVC 中防伪令牌(CSRF)未生效的问题通常是由于以下几种原因导致的:
@Html.AntiForgeryToken()
方法生成防伪令牌,并在表单中使用 @Html.AntiForgeryToken()
方法添加隐藏字段。例如,在视图中添加防伪令牌:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
// 表单其他内容
}
Global.asax
文件中注册了全局过滤器 ValidateAntiForgeryToken
。例如,在 Global.asax
文件中注册全局过滤器:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// 注册全局过滤器
GlobalFilters.Filters.Add(new ValidateAntiForgeryTokenAttribute());
// 其他初始化代码
}
}
HttpPost
方法中使用 [ValidateAntiForgeryToken]
特性。例如,在控制器的 HttpPost
方法中启用防伪令牌验证:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyAction(MyViewModel model)
{
// 处理表单提交
}
通过以上方法,你应该能够解决 ASP.NET MVC 中防伪令牌(CSRF)未生效的问题。