在WEBAPI中,AuthorizeAttribute类重写时,如何获取post数据是个难题,网上找资料也不好使,只能自己研究,通过研究发现,WEBAPI给了我们获取POST数据的可能,下面介绍一下:

//将POST数据以字符串的形式读取,例如post的json数据,就可以以这种方式读取 
actionContext.Request.Content.ReadAsStringAsync();


//将POST数据以内容流的形式读取 
actionContext.Request.Content.ReadAsStreamAsync();


//将POST数据以FORM键值对的形式读取,但是提交的数据须得是FORM提交的才可以 
actionContext.Request.Content.ReadAsFormDataAsync();

代码具体如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using BoxSecurity; namespace BoxWebApiFilter
{
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class ApiAuthorizeFilter : AuthorizeAttribute
{
private static List<string> PublicCmds = new List<string>()
{
"XXXX"
};
protected override bool IsAuthorized(HttpActionContext actionContext)
{
// 验证token
//var token = actionContext.Request.Headers.Authorization;
var ts = actionContext.Request.Headers.Where(c => c.Key.ToLower() == "tokenxxx").FirstOrDefault().Value;
var requestContent = actionContext.Request.Content.ReadAsStringAsync();//读取post提交的json数据
requestContent.Wait();//等待异步读取结束
var inputJson = requestContent.Result;
//此接口无需token验证
BoxCommand.CmdRequest request =
Newtonsoft.Json.JsonConvert.DeserializeObject<BoxCommand.CmdRequest>(inputJson);
if (PublicCmds.Contains(request.Cmd))
{
return true;
} if (ts != null && ts.Count() > )
{
var token = ts.First<string>();
// 验证token
return TokenHelper.IsExistToken(token);
} if (actionContext.Request.Method == HttpMethod.Options)
return true;
return false; }
}
}

WebAPI的AuthorizeAttribute扩展类中获取POST提交的数据的更多相关文章

  1. layui中获取全部提交的数据

    <form class="layui-form" action="">...........input textarea ......</fo ...

  2. asp.net 类库中获取session c#类中获取session

    asp.net  类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...

  3. spring的普通类中获取session和request对像

    在使用spring时,经常需要在普通类中获取session,request等对像. 1.第一钟方式,针对Spring和Struts2集成的项目: 在有使用struts2时,因为struts2有一个接口 ...

  4. spring在普通类中获取session和request

    在使用spring时,经常需要在普通类中获取session,request等对像.比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2 ...

  5. jmeter随笔(3)-从csv中获取带引号的数据详情

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  6. jmeter csv中获取带引号的数据详情

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  7. jmeter csv中获取带引号的数据详情(转)

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  8. 【原创】大叔问题定位分享(36)openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil

    openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil This function returns nil if the request ...

  9. Action类中获取request等对象的方法

    struts2中的action类中,SevletActionContext可以获取

随机推荐

  1. 第六章 图(a)概述

  2. Little-endian和Big-endian(小端数据和大端数据)

    Little和Big指的是内存地址的大小,end指的是数据的末尾. Little-endian指内存地址低的地方存数据的末尾(即低字节) Big-endian指内存地址高的地方存数据的末尾(即高字节) ...

  3. SpringMVC入门(基于注解方式实现)

    ---------------------siwuxie095                             SpringMVC 入门(基于注解方式实现)         SpringMVC ...

  4. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  5. mysql rc模式时binlog_format=row的解释【转】

    总体来说:在 tx_isolation= READ-COMMITTED .binlog_format =statement 的情况下,mysql 没有gap 锁,这样binlog 记录的数据修改的顺序 ...

  6. Alluxio/Tachyon如何发挥lineage的作用?

    在Spark的RDD中引入过lineage这一概念.指的是RDD之间的依赖.而Alluxio则使用lineage来表示文件之间的依赖.在代码层面,指的是fileID之间的依赖. 代码中的注释指出: * ...

  7. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...

  8. c++ 博客资源

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  9. vs 2015 运行安卓报错

    vs2015 start Android 错误信息如下: Severity Code Description Project File Line Suppression StateError java ...

  10. 2018.07.04 BZOJ1336&&1337: Balkan2002Alien最小圆覆盖

    1336: [Balkan2002]Alien最小圆覆盖 1337: 最小圆覆盖 Time Limit: 1 Sec Memory Limit: 162 MBSec Special Judge Des ...