[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. C#: Create a WebRequest with HTTP Basic Authentication

    http://blog.csdn.net/huangyaoshifog/article/details/4470675 myReq = WebRequest.Create(url); string u ...

  2. CentOS 大量的TIME_WAIT解决方法

    CentOS 大量的TIME_WAIT解决方法 最近个人博客总是出现无法打开的现象,具体表现为,打开页面需要等待n长时间,登陆系统后发现系统存在大量TIME_WAIT状态的连接,google了一下解决 ...

  3. 第五周技术博客发表 web 网页开发

    <html><head> <title> HTML</title></head><body > <h1>会员注册界面 ...

  4. Asp.Net修改上传文件大小限制(修改web.config)

    i. Configuration节点下 <system.webServer> <security> <requestFiltering> <!--单位为字节  ...

  5. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  6. display:none和visibility: hidden二三事

    display:none属性后,HTML元素(对象)的宽度.高度等各种属性值都将“丢失”;而使用visibility:hidden属性后,HTML元素(对象)仅仅是在视觉上看不见(完全透明),而它所占 ...

  7. 【ACMER纷纷表示】女生应该找一个玩ACM的男生

    1.强烈的事业心 将来,他也一定会有自己热爱的事业.而且,男人最性感的时刻之一,就是他专心致志做事的时候.所以,找一个机会在他全神贯注玩ACM的时候,从侧面好好观察他,你就会发现我说的话没错.2.永不 ...

  8. 【log4net】配置文件

    相关资料: http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html 注意: //如果为了使得应用程序的配置文件(web/app.con ...

  9. Tutorial: Model

    What is a model? Across the internet the definition of MVC is so diluted that it's hard to tell what ...

  10. UNDERSTANDING CALLBACK FUNCTIONS IN JAVASCRIPT

    转自: http://recurial.com/programming/understanding-callback-functions-in-javascript/ Callback functio ...