情景:
   某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作。
  当登录成功,前端继续操作(post后端接口)时发现以下错误:
     提供的防伪标记适用于用户“”,但当前用户为“XX”。
  (登录以及具体页面操作都是ajax post)
 
看到这个错误后先是这么处理:
        
               //登录代码。。。    
               string oldCtoken = HttpContext.Request.Cookies["__RequestVerificationToken"].Value;
                string ctoken;
                string ftoken;
                AntiForgery.GetTokens(oldCtoken, out ctoken, out ftoken); //生成新token
                HttpContext.Request.Cookies.Set( new HttpCookie ("__RequestVerificationToken", ctoken));
                return Content(ftoken); //返回,前端收到后设置 hidden token
但是发现虽然使用了新的cookie token 、 form token ,但是还是提示用户不对。
接着研究源码。。。通过研究源码发现:生成token的时候 会取当前用户identity。 (之前有遇到登录后,identity 不会刷新,所以解决方案很明显了)
 
 string[] roles = new string [] { "Role1", "Role2" }; //具体情况设置
                HttpContext.User =
                   new GenericPrincipal (new GenericIdentity( "XX"), roles);  //用户名具体设置
 
 
                //这样也是可以的
                //ftoken = AntiForgery.GetHtml().ToString();
                //Regex r = new Regex(@"value=""([^""]+)");
                //var m = r.Match(ftoken);
                //return Content(m.Groups[1].Value);

asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录的更多相关文章

  1. ASP.NET MVC验证框架中关于属性标记的通用扩展方法

    http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html 之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使 ...

  2. ASP.NET MVC:如何提供 Controller 继承体系使用的 ModelBinder?

    背景 Mvc 提供了一种可扩展的模型绑定机制,具体来说就是:将客户端传递的参数按照一定的策略绑定到 action 的参数上,这带来的直接好处就是让 action 的参数支持强类型.一般来说我们有如下方 ...

  3. Asp.Net MVC anti-forgery token的问题:nameidentifier or identityprovider not present

    当使用ClaimsIdentity的时候,Asp.Net MVC在生成AntiForgeryToken的时候会默认使用User.Identity中两种ClaimsType的值:NameIdentifi ...

  4. 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  5. 数据注解和验证 – ASP.NET MVC 4 系列

           不仅在客户端浏览器中需要执行验证逻辑,在服务器端也需要执行.客户端验证能即时给出一个错误反馈(阻止请求发送至服务器),是时下 Web 应用程序所期望的特性.服务器端验证,主要是因为来自网 ...

  6. ASP.NET MVC 监控诊断、本地化和缓存

    这篇博客主要是针对asp.net mvc项目的一些常用的东东做一个讲解,他们分别是监控诊断.本地化和缓存.虽然前两者跟asp.net mvc看上去好像是没什么关联. 但其实如果真正需要做asp.net ...

  7. ASP.NET MVC学习之过滤器篇(1)

    一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面. 二.正文 以下的示例建立在ASP.NET MVC ...

  8. ASP.NET MVC进阶二

    一.数据验证 数据验证的步骤 在模型类中添加与验证相关的特性标记 在客户端导入与验证相关的js文件和css文件 使用与验证相关的Html辅助方法 在服务器端判断是否通过服务器端验证 常用的验证标记 R ...

  9. ASP.NET MVC 微信公共平台开发之获取用户消息并处理

    ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...

随机推荐

  1. 【LeetCode】56. Merge Intervals

    Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given  ...

  2. Windows2008R2允许多用户远程登录设置

    Windows 2008 R2终端服务器安装配置 后面的一律下一步就可以安装完成了,下面是如何设置多用户远程登陆. Windows2008允许多用户远程登录设置 服务器重启,以上配置全部生效.

  3. 使用SecureCRT连接linux

    1.登录之后进入linux系统,输入ifconfig(interfaces config)查看网卡信息 2.设置VMWare的虚拟机连接方式为仅主机模式 3.查看VMWare为仅主机模式虚拟网卡IP地 ...

  4. JS取date的前一天时间

    在javascript中取date的前一天时间: new Date(new Date()-24*60*60*1000),//取前一天的时间

  5. Interface_GL通过gl_interface导入日记账(案例)

    2014-06-17 BaoXinjian

  6. Android studio 如何让包有层次显示

    Android studio中我新建的包在原来包名后面显示,而我想让包名能层次展示: 方法: 点击如图部分,在弹出框中 去掉 ”compact empty middle package“前面勾

  7. linux page buffer cache深入理解

    Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = ...

  8. tomcat支持https的历程

    tomcat真是业界良心啊,文档写的详细无比. 一.https是什么? 简单的说,就是http+SSL/TLS 协议还是http,但是在传输层过程中使用了加密(涉及握手.秘钥分发.加密.解密等过程). ...

  9. 安装ubuntu和windows双系统后,如何修改默认启动项

    在安装了Ubuntu16.04系统之后,系统会默认自启动Ubuntu16.04,而我们大多数情况下可能都在使用windows系统,不修改默认设置,不经意间便会启动了Ubuntu16.04,通过我的经历 ...

  10. scrapy 的框架的安装

    1.简介: scrapy 是用python写成的一个web 爬虫框架,scrapy 会把大多数在爬取网站时的通用的事给自动化的做了:我最开始爬别人的网站的时候 用的是requests这个库,用这个库我 ...