如何在Asp.Net WebApi接口中,验证请求参数中是否携带token标识!
[BasicAuthentication]
public abstract class ApiControllerBase : ApiController
{
#region Gloal Property
/// <summary>
/// token_id
/// </summary>
public string token_ID { get; set; } /// <summary>
/// user_id
/// </summary>
public string user_ID { get; set; }
#endregion #region InitializeUser
protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
{
user_ID = token_ID = string.Empty; #region 【 验证请求中是否有 token 授权 】
if (controllerContext.Request.Method != HttpMethod.Get)
{
string postContentData = string.Empty;
string contentType = string.Empty;
string postTokenStr = string.Empty;
//----------------获取Post参数--------------------
NameValueCollection postParam = null; //【处理】content-type:application/x-www-form-urlencoded
if (controllerContext.Request.Content.IsFormData())
{
postParam = controllerContext.Request.Content.ReadAsFormDataAsync().Result;
postContentData = postParam.ToString();
postTokenStr = postParam["token"] ?? "";
contentType = "application/x-www-form-urlencoded";
}
//【处理】 content-type:application/json
else
{
contentType = "application/json";
if (!controllerContext.Request.Content.IsMimeMultipartContent("form-data"))
{
postContentData = controllerContext.Request.Content.ReadAsStringAsync().Result;
JavaScriptSerializer json = new JavaScriptSerializer();
dynamic token = json.Deserialize(postContentData, typeof(object));
if (postContentData.Contains("token"))
{
postTokenStr = Convert.ToString(token["token"]);
}
}
else
{
contentType = "multipart/form-data";
var collPostParamData = controllerContext.Request.RequestUri.ParseQueryString();
//----------------同时处理Post中的Url参数请求-------------------------------
if (!string.IsNullOrWhiteSpace(collPostParamData["token"]))
{
postTokenStr = System.Web.HttpUtility.UrlDecode(collPostParamData["token"]);
}
}
}
//----------------设置回FormData参数----------------------
if (!controllerContext.Request.Content.IsMimeMultipartContent("form-data"))
{
StringContent content = new StringContent(postContentData, Encoding.UTF8, contentType);
controllerContext.Request.Content = content;
} this.token_ID = postTokenStr;
BasicAuthenticationAttribute.isLoginAuth = ValidateCacheToken(postTokenStr);
}
else
{
var getParam = controllerContext.Request.RequestUri.ParseQueryString();
//----------------Get请求-------------------------------
if (!string.IsNullOrWhiteSpace(getParam["token"]))
{
var _getToken = System.Web.HttpUtility.UrlDecode(getParam["token"]);
this.token_ID = _getToken;
BasicAuthenticationAttribute.isLoginAuth = ValidateCacheToken(_getToken);
}
}
#endregion
base.Initialize(controllerContext);
}
注意: controllerContext.Request.Content.ReadAsFormDataAsync().Result 和 controllerContext.Request.Content.ReadAsStringAsync().Result; 只能取,并且取完,后面子类中就获取不到了,必须就得重新赋值进去,这是我觉得很怪异的地方。
StringContent content = new StringContent(postContentData, Encoding.UTF8, contentType);
controllerContext.Request.Content = content;
如何在Asp.Net WebApi接口中,验证请求参数中是否携带token标识!的更多相关文章
- Asp.Net WebAPI 通过HttpContextBase获取请求参数
WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...
- 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果
/** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...
- ASP.NET WEBAPI 的身份验证和授权
定义 身份验证(Authentication):确定用户是谁. 授权(Authorization):确定用户能做什么,不能做什么. 身份验证 WebApi 假定身份验证发生在宿主程序称中.对于 web ...
- asp.net webapi 自定义身份验证
/// <summary> /// 验证 /// </summary> /// Account API账号 /// TimeStamp 请求时间 /// Sign 所有请求参数 ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0 之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样: Accept: application/jso ...
- 关于ASP.NET Web API 客户端的请求报文中添加 Authorization
当你使用客户端发送请求 Web API 的时候,因为API 有验证,所以你的请求报文中必须有”Authorization“,那么就需要手动添加了! HttpClient client = new Ht ...
- hibernate-validator验证请求参数
开发接口要进行请求参数内容格式校验,比如在接收到请求参数后依次需要进行数据内容判空.数据格式规范校验等,十分麻烦,于是尝试用hibernate-validator进行参数校验,简单记录一下使用步骤: ...
- Springboot采用hibernate-validate验证请求参数
在springboot项目使用hibernate-validate对请求参数添加注解进行校验 常用注解 @Null,标注的属性值必须为空 @NotNull,标注的属性值不能为空 @AssertTrue ...
- nodejs获取ASP.Net WebAPI(IIS Windows验证)
处理了很多天,终于使用Nodejs可以发出请求至WebAPI,能够正常处理数据了 首先加入npm包 npm install httpntlm 在app.js中加入代码 var httpntlm = r ...
随机推荐
- BZOJ 2763: [JLOI2011]飞行路线 spfa dp
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...
- js获取时间
var myDate = new Date(); console.log(myDate.toLocaleString()); function getNowFormatDate() { var dat ...
- 【BZOJ】【1076】【SCOI2008】奖励关
状压DP+数学期望 蒟蒻不会啊……看题跑…… Orz了一下Hzwer,发现自己现在真是太水了,难道不看题解就一道题也不会捉了吗? 题目数据范围不大……100*(2^16)很容易就跑过去了…… DP的时 ...
- PHP中如何给日期加上一个月 加一周 加一天
echo date("Y-m-d",strtotime("+1 month",strtotime("2012-02-04"))); 结果 ...
- tomcat 解析(一)-文件解析
做web项目,最常用的服务器就是Apache的tomcat.虽然一直在用tomcat,但都是仅限在使用的阶段,一直没有深入学习过.想深入学习tomcat,首推的肯定是官网:http://tomcat. ...
- UNDERSTANDING CALLBACK FUNCTIONS IN JAVASCRIPT
转自: http://recurial.com/programming/understanding-callback-functions-in-javascript/ Callback functio ...
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
转自 http://tech-wonderland.net/blog/summary-of-ksum-problems.html 前言: 做过leetcode的人都知道, 里面有2sum, 3sum ...
- SQL SERVER(MSSQLSERVER) 服务无法启用 特定服务错误:126
SQL SERVER(MSSQLSERVER) 服务无法启用 特定服务错误:126 对于这样一个错误google了一下 说是 要禁止掉via才行 回到SQL配置管理器中 禁止掉via 果然可以重新 ...
- Java程序员学C#基本语法两个小时搞定(对比学习)
对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...
- [2-sat]HDOJ3622 Bomb Game
题意:给n对炸弹,每对炸弹选其中一个爆炸. 每个炸弹爆炸的半径相同 圆不能相交, 求最大半径 2-sat简介 二分半径, 枚举n*2个炸弹 若i炸弹与j炸弹的距离小于半径*2 则建边 比如 第一对炸 ...