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. java格式化数字、货币、金钱

    网上摘来的,以后可能会用到 java开发中经常会有数字.货币金钱等格式化需求,货币保留几位小数,货币前端需要加上货币符号等.可以用java.text.NumberFormat和java.text.De ...

  2. php返回文件路径

    1 basename — 返回路径中的文件名部分 如果文件名为test.php,路径为www/hj/test.php echo basename($_SERVER['PHP_SELF']); 输出为: ...

  3. bluebird的安装配置

    安装 下载bluebird 3.5.0(开发) 意味着在开发中使用的未分类源文件.警告和长堆栈跟踪被启用,这会影响性能. <script src="//cdn.jsdelivr.net ...

  4. mysql 5.7.11 源码安装

    mysql5.711安装 1.安装boost包下载地址http://sourceforge.net/projects/boost/files/boost/ 2.解压boost_1_59_0.tar.g ...

  5. Boost 线程学习笔记

    Bolg转载自:http://www.cnblogs.com/lvdongjie/p/4447193.html 一: 创建线程 #include <iostream> #include & ...

  6. 前端学习笔记2017.6.12 DIV布局网页

    DIV的功能就是把网页划分成逻辑块的. 看下豆瓣东西页面的布局,我们来分析下. 按照先从上到下的原则,把这个页面分成几个块: 首先是最顶端的这个条,这是一个DIV,我们给它起个名字,叫banner 然 ...

  7. ZROI2018普转提day2t3

    传送门 分析 考试的时候sb了......我们发现可以按照先序遍历将一棵树变成一个序列,而不需要删的数的数量便是最长上升子序列的长度,但是还有一个问题就是如果在5和7之间有3个空的位置就无法填入合法的 ...

  8. 安装Maven及Eclipse中配置Maven

    下载maven版本: 1.进入官网:http://maven.apache.org/download.cgi   ,下载编译后的maven版本:如图下: 2.创建一个目录,把下载的maven压缩包,进 ...

  9. Python程序设计4——控制语句

    1 print和import的更多信息 1.1 使用逗号输出 前面已经讲解过如何使用print来打印表达式,可以使用都好来打印多个表达式,只要用逗号隔开即可. >>> print ' ...

  10. spring项目中监听器作用-ContextLoaderListener

    附加链接:http://blog.csdn.net/zjw10wei321/article/details/40145241 作用:在启动Web 容器时,自动装配Spring applicationC ...