如何在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 ...
 
随机推荐
- Virtualbox虚拟机设置不完全笔记
			
先说说我想实现的东西,我想在虚拟机安装各种开发环境,我个人在学习Node.然后我装了一个Ubuntu Server,所以我又想共享一个windows下的文件夹,这样可以让我在windows下开发,在L ...
 - 3143: [Hnoi2013]游走 - BZOJ
			
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
 - C# 客户端判断服务器连接已断开
			
问题描述: 在C# Socket编程中,服务器端已经断开连接(发送数据方),客户端接收服务器端发送数据,在客户端使用client.Recieve()中,服务器端断开连接,客户端任然显示已 ...
 - 剑指offer--面试题16
			
#include<stack> //思路:遍历链表过程中,将各个指针入栈,再出栈进行反转 ListNode* ReverseList(ListNode* pHead) { if(pHead ...
 - jsp的<%@ include file="jsp/common.jsp" %>报错误Duplicate local variable basePath
			
将公共引入的文件放到common.jsp中,其他页面引入该jsp即可使用 <%@ page language="java" import="java.util.*& ...
 - 【技术贴】解决MySql连接不上 ip远程连接Host is not allowed to conn
			
落雨 如果你想连接远程IP的mysql的时候发生这个错误: ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL ...
 - MySql修改默认端口号,修改my.ini的端口号
			
MySql默认端口号为3306,如果安装多个或者冲突需要修改端口号,修改my.ini的端口号就可以了,文件一般情况下在安装目录下.下面是具体说明: 方法/步骤 先在服务里停止mysql的服务器,再找到 ...
 - 01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务
			
Nhibernate事务的使用: public void Add(Customer customer) { ISession session = _sessionManager.GetSession( ...
 - hdoj 2112 HDU Today
			
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2112 分析:多了一个地方的条件,用map来映射地点编号,Dijkstra求解即可 //2013-10- ...
 - POJ 2568/ZOJ 1965 Decode the Tree
			
题意:在树中,每次删去节点值最小的叶子结点. 每删去一个点,就给出与这相连的点的值,直到最后只剩下一个根结点,给这N-1个数,重新建立这个树. 思路: 给出的节点号按次序存入到数组a中,将未给出的数存 ...