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. 使用ServerSocket建立聊天服务器(二)

    -------------siwuxie095                         工程名:TestMyServerSocket 包名:com.siwuxie095.socket 类名:M ...

  2. 在Oracle 12C中使用scott账号

    在Oracle11g中默认是有scott账号的,但在Oracle 12C中则不能直接使用. 我的机器环境: 操作系统:Windows Server 2008 R2 64位 Oracle版本:Oracl ...

  3. 面试题: Struts2

    1. Struts2与Struts1的联系与区别是什么?为什么要用Struts2? 答案: struts1与struts2都是mvc框架的经典实现模式. Struts2不是从Struts1升级而来,而 ...

  4. Git 之 github分享代码

    作为一个技术人员还是脱离不了屌丝的本质,所以每天都是逛逛github,看看别人有什么好的项目,自己可以给他挑挑bug也可以提供自己的水平,但是别人不那怎么才能给别人贡献代码呢?那就是fork了.... ...

  5. svn跨多个版本比较

    由于一些原因某个路径下的 svn revision 不是连续的,在比对时需要跨多个版本进行比较,使用下面步骤 Show_log -> 按住 ctrl 键选择不同版本 -> 右键 -> ...

  6. Java50道经典习题-程序44 偶数的素数和

    题目:一个偶数总能表示为两个素数之和.分析:一个偶数可能会有不止一对两个素数之和的情况 例如:20=3+17 20=7+13 import java.util.Scanner; public clas ...

  7. angular 分页

    http://jsfiddle.net/SAWsA/11/# <html xmlns:ng="http://angularjs.org" ng-app lang=" ...

  8. 简单的linux service(linux服务)编写,运行示例

    1.写一个简单小程序 #include<stdio.h> #include<stdlib.h> int main(int argc,char **argv) { while(1 ...

  9. vue2.x学习笔记

    1.使用模板template的时候必须要有跟节点,可以支持表达式,但不支持正则,想使用正则就用过滤器. 2.数据在显示的时候所带的HTML DOM直接显示,不会渲染,要渲染DOM,得用v-html. ...

  10. 用递归算法返回该元素id下面的所有子集id

    private List<int> listAreaId = new List<int>(); /// <summary> /// 递归获取本区域下面的所有子集 / ...