public class AuthFilter : Attribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{ } private JsonResult ErrJsonResult(string str)
{ return new JsonResult(JsonHelper.ToJson(OperateResult.Error(str))); //context.Result = new ContentResult()
//{
// Content = str,
// ContentType = "JSON",
// StatusCode=0
//};
} /// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private string Md5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = ; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
} public void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Response.Headers.Add("My-Header", "WebApiFrame-Header"); //JsonResult json = new JsonResult(JsonHelper.ToJson(OperateResult.Succeed("获取成功")));
//context.Result = json;
//ErrorRedirect(context); var request = context.HttpContext.Request; var method = request.Method;
var staffId = "^和JS端需要对应$"; string timestamp = string.Empty, nonce = string.Empty, signature = string.Empty; if (request.Headers.ContainsKey("timestamp"))
timestamp = request.Headers["timestamp"].FirstOrDefault(); if (request.Headers.ContainsKey("nonce"))
nonce = request.Headers["nonce"].FirstOrDefault(); if (request.Headers.ContainsKey("signature"))
signature = request.Headers["signature"].FirstOrDefault(); if (string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(signature))
{
context.Result = ErrJsonResult( "参数错误");
return;
} double ts = ;
bool timespanvalidate = double.TryParse(timestamp, out ts);
//double c = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds - ts;
bool falg = (DateTime.UtcNow - new DateTime(, , , , , , )).TotalMilliseconds - ts > * ; if (falg || (!timespanvalidate))
{
context.Result = ErrJsonResult("timeSpanValidate"); return;
} var data = string.Empty;
IDictionary<string, string> sortedParams = null; switch (method.ToUpper())
{
case "POST":
case "PUT":
case "DELETE":
//InputStream
Stream stream = context.HttpContext.Request.Body;
StreamReader streamReader = new StreamReader(stream);
sortedParams = new SortedDictionary<string, string>(new JsonSerializer().Deserialize<Dictionary<string, string>>(new JsonTextReader(streamReader))); break; case "GET": IDictionary<string, string> parameters = new Dictionary<string, string>(); foreach (string key in context.HttpContext.Request.Query.Keys)
{
if (!string.IsNullOrEmpty(key))
{
parameters.Add(key, context.HttpContext.Request.Query[key]);
}
} sortedParams = new SortedDictionary<string, string>(parameters);
break; default:
context.Result = ErrJsonResult("defaultOptions");
return;
} StringBuilder query = new StringBuilder(); if (sortedParams != null)
{
foreach (var sort in sortedParams.OrderBy(k => k.Key))
{
if (!string.IsNullOrEmpty(sort.Key))
{
query.Append(sort.Key).Append(sort.Value);
}
} data = query.ToString().Replace(" ", "");
} var md5Staff = Md5Hash(string.Concat(timestamp + nonce + staffId + data)); if (!md5Staff.Equals(signature))
{
context.Result = ErrJsonResult("md5Staff");
return;
} } // 错误处理方法
private void ErrorRedirect(ActionExecutingContext filterContext)
{
filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Home", action = "Default" }));
} // end ErrorRedirect
//当执行ErrorRedirect方法时,它会自己选择指定的Route并跳转到非AdminIndex的Action中. //public override void OnActionExecuting(HttpActionContext actionContext)
//{
// // // 所有维护用api请求都要求验证登录
// // if (!IsLogined())
// // {
// // var username = HttpContext.Current.Request.QueryString["name"];
// // var password = HttpContext.Current.Request.QueryString["pwd"];
// // //if (actionContext.ActionArguments != null)
// // //{
// // // actionContext.ActionArguments.TryGetValue("user", out username);
// // // actionContext.ActionArguments.TryGetValue("pwd", out password);
// // //}
// // if (!DoLogin(username, password))
// // {
// // actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, ApiResult.CreateError("未登录"));
// // return;
// // }
// // }
// // base.OnActionExecuting(actionContext);
//} //private bool DoLogin(string userName = "", string md5Pwd = "")
//{
// // 登录验证
//}
//private bool IsLogined()
//{
// // 通过cookie或Session判断是否登录
//}
}

使用方法

如    UserController 控制器,[AuthFilte]加上标签就会对函数验证

[Route("api/[controller]/[action]")]
public class UserController : Controller
{
// GET: api/<controller>/<action>
[HttpGet]
[AuthFilter]
public string HasBindUser(string openid)
{
if(string.IsNullOrEmpty(openid))
{
return JsonHelper.ToJson(OperateResult.Error("缺少openid参数"));
}
string sql = "SELECT EmpID FROM dbo.WXMiniUserBind WHERE OpenID=@OpenID AND EmpID IS NOT null"; int empid = Convert.ToInt32(SqlHelper.ExecuteScalar(sql, new string[,] { { "@OpenID", openid } }));
if(empid!=)
{
return JsonHelper.ToJson(OperateResult.SucceedData(empid));
} return JsonHelper.ToJson(OperateResult.Error("请绑定用户"));
} [HttpGet]
public string Test()
{
return "I'm Test";
} }

asp.net core 标签验证函数功能的更多相关文章

  1. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  2. Vue.js与 ASP.NET Core 服务端渲染功能整合

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  3. ASP.NET Core身份验证

    asp.net core 身份验证 本文旨在演示如果使用内置的 identity 实现 asp.net core 的身份验证,不会进行其它扩展.本文将通过最简单的代码演示如何进行登录和身份验证操作. ...

  4. ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

    在你将现有的用户登录(Sign In)站点从ASP.NET迁移至ASP.NET Core时,你将面临这样一个问题——如何让ASP.NET与ASP.NET Core用户验证Cookie并存,让ASP.N ...

  5. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  6. ASP.NET Core身份验证服务框架IdentityServer4-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  7. ASP.NET Core 2.0 新功能汇总

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

  8. 理解 ASP.NET Core: 验证

    ASP.NET Core 验证 通常在应用程序中,安全分为前后两个步骤:验证和授权.验证负责检查当前请求者的身份,而授权则根据上一步得到的身份决定当前请求者是否能够访问期望的资源. 既然安全从验证开始 ...

  9. asp.net core mvc实现伪静态功能

    在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给 ...

随机推荐

  1. Solr之缓存篇

    原文出自:http://my.oschina.net/u/1026644/blog/123957 Solr在Lucene之上开发了很多Cache功能,从目前提供的Cache类型有: (1)filter ...

  2. cocos2d-js 定时器

    1.scheduleUpdate 节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执行update方法 var ScheduleUpdateLayer = cc.Laye ...

  3. MyBatis01 MyBatis基础知识【搞清楚原理】

    1 MyBatis是什么 mybatis是一个持久层的框架,它对jdbc做了封装:是apache下的顶级项目 mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成 ...

  4. gitlab 添加ssh秘钥

    在创建新的ssh秘钥对之前,要先确认一下电脑中是否已经有了一对秘钥: Git Bash on Windows / GNU/Linux / macOS / PowerShell: cat ~/.ssh/ ...

  5. nginx负载均衡, 配置地址带端口

    nginx.conf  配置如下: upstream wlcf.dev.api { server 127.0.0.1:8833; server 127.0.0.2:8833; } server { l ...

  6. OpenStack基础及概念

    一.云计算基本概念解析        1.1什么是云计算 云计算:代表计算资源向云水循环一样,按需分配,循环利用. 1.2.云计算分类 狭义:IT基础设施的交互和使用模式,通过网络以按需,易扩展的方式 ...

  7. Ubuntu重启关机命令使用

    如果你想保持当前用户的登录而且使用root用户执行命令 可以输入:su root,输入密码 可以运行,shutdown 命令 重启命令: 1.reboot 2.shutdown -r now 立刻重启 ...

  8. getline()函数的两种用法

    getline()函数的输入流对象可以是标准输入流对象cin,也可以是一个文件输入流对象fin; (1)输入流对象的成员函数(有三个参数,一般除非需要自己选定停止符,并不推荐使用): basic_is ...

  9. Mac安装破解版Office 2016办公软件

    一.相关软件 Microsoft Office 2016 For Mac Cracker 破解工具 资源地址(链接:https://pan.baidu.com/s/1Z5CIv-XbxS08MniYN ...

  10. Java50道经典习题-程序46 字符串连接

    题目:编写一个两个字符串连接的程序 import java.util.Scanner; public class Prog46 { public static void main(String[] a ...