1. 程式人生 > >WebAPI的AuthorizeAttribute擴充套件類中獲取POST提交的資料

WebAPI的AuthorizeAttribute擴充套件類中獲取POST提交的資料

在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() > 0) { var token = ts.First<string>(); // 驗證token return TokenHelper.IsExistToken(token); } if (actionContext.Request.Method == HttpMethod.Options) return true; return false; } } }