WebApi的过滤器
代码:
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的过滤器的更多相关文章
- 一、WebAPI自定义过滤器的使用
一.WebAPI自定义过滤器的使用 1.注册过滤器 using System.Web.Http; using KYINT.WebAPIService.Handler; namespace KYINT. ...
- WebApi:过滤器的种类
WebApi:筛选器的种类 授权筛选器:这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全决策.AuthorizeAttrib ...
- WebApi 自定义过滤器实现支持AJAX跨域的请求
我想关于此类话题的文章,大家一搜铺天盖地都是,我写此文的目的,只是对自己学习过程的记录,能对需要的朋友有所帮助,也百感荣幸!!!废话不多说,直接上代码! 客户端:很简单的AJAX请求 <html ...
- 【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录
filter的介绍 filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等:Web API提供两种过滤器的基本类型:actionfilterattribute,excep ...
- .net core webapi 使用过滤器。
过滤器一般用于权限校验.日志处理... 一:ActionFilterAttribute过滤器. 1:建一个类,继承于ActionFilterAttribute抽象类. public class Log ...
- WEBAPI使用过滤器对API接口进行验证
用户登录控制器:[ActionFilter]自定义过滤器 用户信息:var userData = new JObject(); userData.Add(" ...
- webapi filter过滤器中获得请求的方法详情(方法名,Attributes)
public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...
- mvc 5 的过滤器和webapi 过滤器 对应实现的action过滤器区别
asp.net webapi Action过滤器实现这个: #region 程序集 System.Web.Http, Version=5.2.3.0, Culture=neutral, Publi ...
- MVC与WebApi中的异常过滤器
一.MVC的异常过滤器 1.自定义MVC异常过滤器 创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可, 注意,该 ...
随机推荐
- java实现excel表格导出
Java 实现导出excel表 POI 1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/389 ...
- C++ Custom Control控件 向父窗体发送对应的消息
向父窗体发送消息 ,这里只讲发送 WM_NOTIFY 消息, 其它消息是相同的 在 控件中的某个函数中 设置发送消息的程序 首先定义一个WM_NOTIFY消息的专用结构. NMHDR nm; nm. ...
- Javascript中的this之我见
来源:http://www.blogjava.net/baoyaer/articles/105864.html 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都 ...
- BlurZoomGallery一个完美下拉进入大图模式
BlurZoomGallery一个完美的Gallery和view的事件处理,下拉放大的时候gallery不断的在添加高度,gallery效果在放大,实现下拉进入大图模式,view滑动事件和galler ...
- 吴裕雄 02-mysql PHP语法
mysqli_connect($connect);mysqli_query($connect,"SQL 语句");mysqli_fetch_array()mysqli_close( ...
- node 跨域
app.post('/api/list',function(req, res){ let reqOrigin = req.headers.origin; // request响应头的origin属性 ...
- Numpy random arange zeros
seed( ) 用于指定随机数生成时所用算法开始的整数值. .如果使用相同的seed( )值,则每次生成的随即数都相同: .如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间 ...
- 魅族手机USB调试无法打开、log无法打印
MEIZU 在打开usb调试允许时,总提示:because an app is oobscuring a premision request, Setting can't verify your re ...
- JDBC的基本概念
英文名:Java DataBase Connectivity 中文名:数据库连接 作用: java操作数据库 本质上(sun公司的程序员)定义的一套操作关系型数据库的规则也就是接口,各数据库厂商实现接 ...
- centos7.4上安装python3环境的坑
前言:为了将爬虫项目布置到服务器上,才有了今天这一下午的坑,必须记录 不要动现有的python2环境!不要动现有的python2环境!不要动现有的python2环境! 解压 tar -xvf Pyth ...