[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标识!的更多相关文章

  1. Asp.Net WebAPI 通过HttpContextBase获取请求参数

    WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...

  2. 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果

    /** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...

  3. ASP.NET WEBAPI 的身份验证和授权

    定义 身份验证(Authentication):确定用户是谁. 授权(Authorization):确定用户能做什么,不能做什么. 身份验证 WebApi 假定身份验证发生在宿主程序称中.对于 web ...

  4. asp.net webapi 自定义身份验证

    /// <summary> /// 验证 /// </summary> /// Account API账号 /// TimeStamp 请求时间 /// Sign 所有请求参数 ...

  5. ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)

    相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0 之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样: Accept: application/jso ...

  6. 关于ASP.NET Web API 客户端的请求报文中添加 Authorization

    当你使用客户端发送请求 Web API 的时候,因为API 有验证,所以你的请求报文中必须有”Authorization“,那么就需要手动添加了! HttpClient client = new Ht ...

  7. hibernate-validator验证请求参数

    开发接口要进行请求参数内容格式校验,比如在接收到请求参数后依次需要进行数据内容判空.数据格式规范校验等,十分麻烦,于是尝试用hibernate-validator进行参数校验,简单记录一下使用步骤: ...

  8. Springboot采用hibernate-validate验证请求参数

    在springboot项目使用hibernate-validate对请求参数添加注解进行校验 常用注解 @Null,标注的属性值必须为空 @NotNull,标注的属性值不能为空 @AssertTrue ...

  9. nodejs获取ASP.Net WebAPI(IIS Windows验证)

    处理了很多天,终于使用Nodejs可以发出请求至WebAPI,能够正常处理数据了 首先加入npm包 npm install httpntlm 在app.js中加入代码 var httpntlm = r ...

随机推荐

  1. 3240: [Noi2013]矩阵游戏

    Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...

  2. 2064: 分裂 - BZOJ

    Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中 ...

  3. 2693: jzptab - BZOJ

    Description Input 一个正整数T表示数据组数接下来T行 每行两个正整数 表示N.MOutput T行 每行一个整数 表示第i组数据的结果Sample Input 1 4 5 Sampl ...

  4. 如何使用Xcode6 调试UI,Reveal

    实际测试需要使用IOS8并且32-bit的设备:具体打开调试的方法有三种: 1.底部调试菜单中: 2,debug菜单中 3.debug navigator 中

  5. C# 数据结构--排序[上]

    概述 看了几天的排序内容,现在和大家分享一些常见的排序方法. 啥是排序? 个人理解的排序:通过对数组中的值进行对比,交换位置最终得到一个有序的数组.排序分为内存排序和外部排序.本次分享排序方法都为内存 ...

  6. HtmlAgilityPack 简单运用

    WebClient client = new WebClient(); MemoryStream ms = new MemoryStream(client.DownloadData("htt ...

  7. hdu 4901

    一个简单的dp,比赛的时候太坚信自己的小聪明没用二维数组一直WA到死: #include<cstdio> #include<cstring> #define maxn 1009 ...

  8. uva 10859

    刘书例题  树形dp #include <cstdio> #include <cstdlib> #include <cmath> #include <map& ...

  9. php浮点数精确运算

    php浮点数精确运算 Php: BCMath bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(strin ...

  10. C# 构造函数的使用方法

    C#构造函数是一个特殊的类方法.在很多方面,包括访问修饰符.重载以及参数列表的语法等方面,构造函数与普通的方法是类似的.然而,在使用方面以及行为方面,构造函数也具有许多特殊的语法和语义规则. 下面列出 ...