代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Principal;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Web.Script.Serialization;
using Ninject;
using System.Net.Http; namespace ADT.TuDou.OAuthWebAPI.Package
{
public class SessionKeyModel
{
public string UserToken { get; set; }
}
public class SessionValidateAttribute : ActionFilterAttribute
{
public const string SessionKeyName = "UserToken";
public const string LoginUserName = "LoginUser"; public override void OnActionExecuting(HttpActionContext filterContext)
{
try
{
bool isok = false; string requestDataStr = "";
JavaScriptSerializer jsr = new JavaScriptSerializer(); string method = filterContext.Request.Method.Method.ToLower();
if (method == "post")
{
//获取POST请求数据
Task<Stream> task = filterContext.Request.Content.ReadAsStreamAsync();
task.Wait();
Stream stream = task.Result;
if (stream != null && stream.Length > )
{
stream.Position = ; //当你读取完之后必须把stream的读取位置设为开始
using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
requestDataStr = reader.ReadToEnd().ToString();
}
}
}
else
{
//获取GET请求数据
List<KeyValuePair<string, string>> list = filterContext.Request.GetQueryNameValuePairs().Where(c => c.Key == SessionKeyName).ToList();
if (list.Count > )
{
string token = list[].Value;
if (!string.IsNullOrEmpty(token))
{
requestDataStr = "{\"" + SessionKeyName + "\":\"" + token + "\"}";
}
}
} if (!string.IsNullOrEmpty(requestDataStr))
{
SessionKeyModel model = jsr.Deserialize<SessionKeyModel>(requestDataStr);
if (model != null && !string.IsNullOrEmpty(model.UserToken))
{
IKernel kernel = new StandardKernel();
kernel.Bind<ADT.TuDou.IBLL.IUserInfo>().To<ADT.TuDou.BLL.UserInfo>();
kernel.Bind<ADT.TuDou.IDAL.IUserInfo>().To<ADT.TuDou.DAL.UserInfo>(); kernel.Bind<ADT.TuDou.IBLL.IUserLoginLog>().To<ADT.TuDou.BLL.UserLoginLog>();
kernel.Bind<ADT.TuDou.IDAL.IUserLoginLog>().To<ADT.TuDou.DAL.UserLoginLog>(); kernel.Bind<ADT.TuDou.IBLL.IScoreRecords>().To<ADT.TuDou.BLL.ScoreRecords>();
kernel.Bind<ADT.TuDou.IDAL.IScoreRecords>().To<ADT.TuDou.DAL.ScoreRecords>(); IBLL.IUserInfo UserInfoBLL = kernel.Get<IBLL.IUserInfo>();
ADT.TuDou.Models.UserInfo userInfo = UserInfoBLL.GetUserByToken(model.UserToken);
if (userInfo != null)
{
//正常
isok = true;
}
}
} if (!isok)
{
filterContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.NoContent);
filterContext.Response.Content = new StringContent("{\"ERROR\":\"用户票证不正确\"}");
}
}
catch (Exception ex)
{
filterContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError);
filterContext.Response.Content = new StringContent("{\"ERROR\":\"" + ex.Message + "\"}");
}
base.OnActionExecuting(filterContext);
}
}
}

WebApi的过滤器的更多相关文章

  1. 一、WebAPI自定义过滤器的使用

    一.WebAPI自定义过滤器的使用 1.注册过滤器 using System.Web.Http; using KYINT.WebAPIService.Handler; namespace KYINT. ...

  2. WebApi:过滤器的种类

    WebApi:筛选器的种类 授权筛选器:这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全决策.AuthorizeAttrib ...

  3. WebApi 自定义过滤器实现支持AJAX跨域的请求

    我想关于此类话题的文章,大家一搜铺天盖地都是,我写此文的目的,只是对自己学习过程的记录,能对需要的朋友有所帮助,也百感荣幸!!!废话不多说,直接上代码! 客户端:很简单的AJAX请求 <html ...

  4. 【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录

    filter的介绍 filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等:Web API提供两种过滤器的基本类型:actionfilterattribute,excep ...

  5. .net core webapi 使用过滤器。

    过滤器一般用于权限校验.日志处理... 一:ActionFilterAttribute过滤器. 1:建一个类,继承于ActionFilterAttribute抽象类. public class Log ...

  6. WEBAPI使用过滤器对API接口进行验证

    用户登录控制器:[ActionFilter]自定义过滤器 用户信息:var userData = new JObject();                   userData.Add(" ...

  7. webapi filter过滤器中获得请求的方法详情(方法名,Attributes)

    public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...

  8. mvc 5 的过滤器和webapi 过滤器 对应实现的action过滤器区别

     asp.net webapi  Action过滤器实现这个: #region 程序集 System.Web.Http, Version=5.2.3.0, Culture=neutral, Publi ...

  9. MVC与WebApi中的异常过滤器

    一.MVC的异常过滤器   1.自定义MVC异常过滤器 创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可, 注意,该 ...

随机推荐

  1. map转换成JSON的3种方法

    http://www.json.cn/JSON格式校验 1 json-lib <dependency> <groupId>net.sf.json-lib</groupId ...

  2. PHP使用redis防止大并发下二次写入(如如何防止重复下订单)

    php调用redis进去读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写. $lock_k ...

  3. zatree的安装

    zatree的安装有2种 一种是支持2.x的用以下方法安装 zabbix安装zatree 实现图形树状化 官网:https://github.com/spide4k/zatree [root@SERV ...

  4. asp.net中的reportview报错跟预编有关系

    当报表控件出现: 报表定义无效.详细信息:根级别上的数据无效.行1,位置1. 先检查一下,你的aspx文件是不是变成了这样一句话 这是预编译工具生成的标记文件,不应被删除! 如果这样的话,报表控件是不 ...

  5. SQL调用C# dll(第一中DLL,没使用强名称密匙,默认是 safe)

    https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx 1.新建项目名称SQLDllTest,类代码如下,没有用Using引用其他类 ...

  6. IE (第一部分) 浏览器 中 关于浏览器模式和文本模式的困惑

    什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和文本模式,对于这两个名词,综合相关文档解释如下: 浏览器模式(Browser Mode),用于切换IE针对该网页的默认文 ...

  7. devmapper: Thin Pool has 162394 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

    问题: 制作镜像的时候报错 devmapper: Thin Pool has 162394 free data blocks which is less than minimum required 1 ...

  8. css 响应式布局

    移动端最让人闹心的就是在不同的手机要做错响应式布局适应各种手机,开始自己做这方面走了很多的弯路,响应式布局如果是部件,就按实际的大小单位px等设置,像宽可以按照百分比计算,长的可以百分比.auto 或 ...

  9. “2017面向对象程序设计(Java)第十三周学习总结”存在问题的反馈及本周教学安排

    “2017面向对象程序设计(Java)第十三周学习总结”存在问题的反馈及本周教学安排1. 图形界面事件处理技术是Java GUI编程核心技术,要求同学们掌握其基本原理和基本编程模型:2. 本周四理论课 ...

  10. 使用fckeditor上传多张图片

    流程: 1.使用fck上传图片到后台 2.后台上传图片到服务器端 3.服务器端返回上传信息 1.jsp页面 <script type="text/javascript"> ...