当你在页面上用 form post 内容时,可能会遇到以下异常:

The required antiforgery cookie "????????" is not present.

咱们来重现一下错误。新建一个 ASP.NET Core 项目,模板选【空】就行了,这是老周最喜欢的项目模板,空 == 自由。

在项目下建一个目录,叫 Pages,用来放 Razor 页面;然后建一个 Index.cshtml 页。

之所以叫 Index.cshtml,是因为 Index 是默认页的名字,这样输入根 URL 就能访问。如果不叫 Index 呢,比如这样。

此时你可以在根 URL 后面加上 demo 来访问,如果想在根目录下访问,也可以在 Startup.ConfigureServices 方法中配置页面路由。

        public void ConfigureServices(IServiceCollection services){services.AddMvc().AddRazorPagesOptions(o =>{ o.Conventions.AddPageRoute("/Demo", "");});}

写路径时一定要注意大小写,在浏览器中输入时不需要注意,但在编程时要注意。AddPageRoute 方法是个扩展方法,pagename 参数表明你要的目标页面,比如我要到达 /Demo 页,route 参数设置路由,空字符串表示根路径。即我在浏览器中输入 http://somehost/,就能定位到 http://somehost/Demo 页。

如果 pagename 为 /users/newone,route 参数为 new,那么,你访问 http://somehost/new 就会指向 http://somehost/users/newone。

你得注意的是,这个 razor page 的路由规则只用于 Web Pages,不是 MVC 的路由规则,这个设置对 MVC 是不起作用的,MVC 可以用类似 {controller]/{action}/{id} 的路由,这个相信你很熟练了(当然,前提是你写过 MVC 应用)。

顺便在 Configure 方法中加上 use 代码,不管是 Web Pages 还是 MVC 都要加上。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}     app.UseMvc();}

现在可以弄一下页面了。打开页面,你发现找不到对应的 PageModel 类,这里老周推荐用 _ViewImports 文件来处理。

在 Pages 目录下添加一个视图导入文件。

然后,引入要用的命名空间。

@using WebSample09
@using WebSample09.Pages

但是这不够完善,还要加一行。

@namespace WebSample09.Pages

@namespace 指令用来设定 Razor 页所生成代码的命名空间,这样就可以确保页面与 PageModel 类型处于同一个命名空间,可以避免将来发生各种错误。

保存并关闭导入页,回到刚刚添加的页面。

@page
@model DemoModel<!doctype html>
<html>
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /><title>示例</title>
</head>
<body><form method="post"><label for="parm">请随便输入:</label><input type="text" name="parm" /><button type="submit">提交</button></form>
</body>
</html>

打开对应的 PageModel 类代码,写一个 OnPost 方法。

public void OnPost(string parm){ViewData["data"] = $"你输入的的值是:{parm}";}

在 POST 之后,通过 parm 参数(与页面 form 元素中字段命名相同,会自动赋值)获取输入的内容,存到 ViewData 中,为了在页面上显示,我们回到刚才的页面,加一个 p 元素,用来显示输入内容。

  <p>@ViewData["data"]?.ToString()</p>

好,现在可以测试了。

运行,进入页面。

输入内容,点按钮提交,会收到 400 错误。

此时 Console Log 记录下一个异常。

即我们开头所说的那个错误,这个验证主要为了安全考虑,防止别人盗了你的数据然后跨域欺骗服务器。

那么,咋解决呢?说出来你可能不信,很简单。

打开刚刚咱们加到项目中的那个视图导入页,然后添加一个 form 元素的 Tag Helper 就行了。

@addTagHelper  Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper, Microsoft.AspNetCore.Mvc.TagHelpers

格式是这样的,很常规,就是 .net 类型的表示方法,用英文的逗号隔开,前面是类型(包括命名空间),后面是程序集名称。

添加标记帮助器前,代码编辑器中是显示为这种颜色的。

添加标记帮助器后,显示为这种颜色。

这时候就可以了。

咱们不妨对比一下,看看应用标记 Helper 前后输出到客户端的 HTML 有啥不同。

在未使用标记帮助器前,提交时会出现 400 错误,生成的 HTML 如下:

<form method="post"><label for="parm">请随便输入:</label><input name="parm" type="text"><button type="submit">提交</button>
</form>

基本是原文输出。

应用 form 元素帮助器后,生成的 HTML 如下:

<form method="post"><label for="parm">请随便输入:</label><input name="parm" type="text"><button type="submit">提交</button><input name="__RequestVerificationToken" type="hidden" value="CfDJ8DEAGDEorWJFuzYOfcGEJpSWrKHd5Qrw4jdARVRF3SwAS-TChnUQHEsFWxtXTk7IDCmpRAB241ucR6kdZA-sRBHnsyOe01ymGLs-DONlZYmB-MzvmXgJmKcn2ZrYMN-Br8fj25nX_zvuwzhyNQ42Das" /></form>

多了一个名为 __RequestVerificationToken 的隐藏元素,标识当前请求会话,防止被人冒用。

顺便补充一下,如果你想导入各种 Tag Helper ,可以把类型名改为 * (星号,通配符)。

@addTagHelper  *, Microsoft.AspNetCore.Mvc.TagHelpers

好了,今天的内容扯到这儿了,88。

【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误相关推荐

  1. Required string parameter ‘XXX‘ is not present

    一.错误描述 写了一个页面登录的方法,在进行页面登录的时候,控制台会报类似Required String parameter 'XXX' is not present 错误. 1.错误信息 控制台日志 ...

  2. ASP.NET Core 认证与授权[2]:Cookie认证

    ASP.NET Core 认证与授权[2]:Cookie认证 原文:ASP.NET Core 认证与授权[2]:Cookie认证 由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用 ...

  3. Required String parameter XXX is not present

    仅限于我在后台开发调试中遇到的这个问题,并且找到原因,解决的. H5前端调Springboot后台接口时,报了以下错误: 这个问题之前也遇到过,只是忘了怎么解决的,什么原因导致的. 这次又遇到了这个问 ...

  4. mybaties :required string parameter ‘XXX‘is not present

    情况一:原因是由于头文件类型不对,可以在MediaType中选择合适的类型,例如GET和POST 情况二:jquery提交delete时,不支持@RequestParam,只支持@PathVariab ...

  5. Required Integer[] parameter ‘xxx‘ is not present”报错的解决方案

    背景 在使用批量删除的时候,前端同学说报错了. 自我调试了下,发现Required Integer[] parameter 'xxx' is not present 方法在后端使用的是post的方式. ...

  6. ASP.NET Core 解决控制台输出日志内容前面[40m等乱码字符

    在默认我写了一个 WPF 程序去做管理 ASP.NET Core 进程的日志的时候,重定向输出的内容里面每一行前面都添加了很多乱码字符串.其实这是 ASP.NET Core 控制台的颜色字符,解决方法 ...

  7. ASP.NET Core 中文文档 第三章 原理(5)错误处理

    原文:Error Handling 作者:Steve Smith 翻译:谢炀(Kiler) 校对:高嵩(jack2gs).何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法 ...

  8. 报错:Required String parameter 'XXX' is not present错误的几种可能性

    背景了解: 同事对代码做了改动,他在后台把原本接收的参数"username"改成了"id",没有把修改的事情通知我.拿到代码运行后发现前台网页的内容显示不完整了 ...

  9. Required String parameter 'xxx' is not present

    学习SpringCloud Feign时,通过url访问Controller,后台报错 2018-03-21 21:05:09.849 INFO 31732 --- [nio-8765-exec-1] ...

最新文章

  1. 数据仓库系列1-高质量数据建模
  2. java 升级1.8_升级系统中的java到1.8版本详解
  3. 自动加载 autoload
  4. SAP系统上线支持维护制度
  5. 嘘!偷偷教你们一个在双十一省钱的办法!
  6. 学计算机的第一年能带电脑吗,大一新生有必要带电脑去学校吗?辅导员给出建议,家长需提前了解...
  7. Java并发编程-ReentrantLock
  8. 向前欧拉公式例题_小学语文阅读理解答题万能公式,简单实用!
  9. 机器学习实战——岭回归、缩减法
  10. 线程池的使用和工作原理
  11. cocos2dx基础篇(14)——基本绘图DrawPrimitives
  12. 别再售卖 5块钱 的 Win10 激活码了,后果很严重
  13. 机器学习(1)-项目 0: 预测泰坦尼克号乘客生还率
  14. 生成对抗网络的判别器_生成对抗网络的随机天气发生器
  15. MediaCodec编码后视频时长不正确的问题
  16. 将一个多段线按一些点分割成一个或多个线段
  17. 中国各省省会城市的坐标地址信息
  18. 推荐7个冷门手机APP,每一个都让我相见恨晚
  19. Excel vlookup筛选两列的重复项
  20. 短信开发:收不到短信通知的解决办法

热门文章

  1. MySQL安装使用的2个问题
  2. 运用面向对象原则,设计一款音乐点唱机
  3. Swift 使用CoreLocation获取定位与位置信息
  4. OC封装的轮播图-只用调用即可
  5. swift3.0提示框新用法
  6. 大主子表关联的性能优化方法
  7. Kinect for Windows V2 SDK+ VS2012 环境搭建
  8. 启动ActiveMQ时报端口被占用异常
  9. 第一次搜索-连连看= =
  10. Pjax是什么以及为什么推荐大家用