当前位置:首页 > Web开发 > 正文

StringComparison.CurrentCultureIgnoreCase)){var timeSpan =

2024-03-31 Web开发

  上篇我们说到。编写控制器类的法式可总结为两个:实现一个类,然后在该类中添加一些公有要领,在运行的该类的时候可作为控制器发明,而这些要领例作为操纵被发明。

这里我们有两个细节:

1:系统如何知道实例化阿谁控制器

2:如何确定用阿谁要领。

  路由:

1:被传统的路由发明,2:通过特性路由发明,3:通过混合路由计谋发明,

传统路由不做过多解释。特性路由,可以让URL模版与措置惩罚惩罚请求时使用的控制器和操纵连结独立,以后,即使URL进行改削,也不需要重构代码。

混合路由则时前两者一起使用,不过注意的是,特性界说的路由比传统路由的优先级更高。

  POCO(plain Old C# Object)

控制器类可以是一个普通的传统C#东西。如果想被发明,要么类名带有Controller后缀,要么用Controller特性修饰该类。POCO简单来说,它能减少开销和/内存占用量。

  访谒HTTP上下文

  POCO最大的问题是没有HTTP上下文,那么我们可以通过ActionContext来实现如:

public class PocoController { [ActionController] public ActionContext Context{get;set} ...... }

  操纵筛选器

 1:它是围绕做要领运行的一段代码,可用于改削和扩展要领自己的行为。

public interface IActionFilter { void OnActionExecuting(ActionExecutingContext filterContext); void OnActionExected(ActionExecutedContext filterContext); }

  它供给了挂钩,在操纵之前和之后运行代码。在筛选器内能够访谒请求和控制器上下文,并且可以读取和改削参数。

每个担任了Cobtroller类的,用户界说的控制器城市获得IActionFilter接口的默认实现。,事实上,基类Controller供给了一对可重写的要领,OnActionExecuting和OnActionExecuted。这就代表每个控制器类都有一个机会,用来决定在挪用给定要领前,后或者挪用要领前后做些什么,只需要重写基类的要领就能实现这种成果。固然POCO不具备.

  

protected DateTime StartTime; public override void OnActionExecuting(ActionExecutingContext context) { var action = context.ActionDescriptor.RouteValues["Action"]; if(string.Equals(action,"index",StringComparison.CurrentCultureIgnoreCase)) { StartTime = DateTime.Now; } base.OnActionExecuting(context); } public override void OnActionExecuted(ActionExecutedContext context) { var action = context.ActionDescriptor.RouteValues["Action"]; if (string.Equals(action, "index", StringComparison.CurrentCultureIgnoreCase)) { var timeSpan = DateTime.Now-StartTime; context.HttpContext.Response.Headers.Add( "duration", timeSpan.TotalMilliseconds.ToString()); } base.OnActionExecuted(context); }

  

技术图片

计算执行了几多毫秒

2:筛选器的分类

:操纵筛选器只是ASP.NET CORE 管道中挪用的一种筛选器,凭据筛选器实际完成的额任务,可分成差此外类型。

类型   描述  
授权筛选器   管道中运行的第一个类筛选器,用来确定发出请求的用户是否有权发出当前的请求  
资源筛选器   当授权之后,在管道的其余部分之前以及管道组件之后运行,对付缓存很有用  
操纵筛选器   在控制器要领操纵之前和之后运行  
异常筛选器   如果注册,则在产生未措置惩罚惩罚异常时触发  
功效筛选器   在操纵要领功效之前和之后运行  

可以将筛选器应用单独要领,也可以应用到整个控制器类,影响该控制器果然的所有操纵要领,相对的,在应用措施启动时注册了全局筛选器之后,他们将自动应用到任何控制器类的任何操纵。

①:添加自界说头

public class HeaderAttribute:ActionFilterAttribute { public string Name { get; set; } public string Value { get; set; } public override void OnActionExecuted(ActionExecutedContext context) { if(!string.IsNullOrWhiteSpace(Name)&&!string.IsNullOrWhiteSpace(Value)) { context.HttpContext.Response.Headers.Add(Name, Value); } return; } }

② 设置请求的区域性

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32001.html