一、初始化

  1、命令行启动应用程序:

dotnet a.dll --urls="http://*:5166" --ip="127.0.0.1" --port=5166

  2、TempData["nane"] 不能跨页面传递,开启Session后可跨页面传递。结论:TempData的实现就是基于Session的。

  二、Asp.net Core Filter

  1、过滤器类型

  ASP.NET Core 有以下五种类型的过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:

  第1执行:Authorization Filter

  授权过滤器 在过滤器管道中第一个执行,通常用于验证当前请求的合法性,不合法后面的管道会直接跳过。它们只有一个Before方法,不像其它大多数过滤器支持前置阶段方法和后置阶段方法。注意,您不要在授权过滤器中抛出异常,因为没有任何代码来处理异常(异常过滤器不处理它们)。

  第2执行:Resource Filter

  资源过滤器 在 Authorization Filter 之后,Model Binding 之前执行。在性能方面,资源过滤器在实现缓存或截断过滤器管道尤为重要。

  第3执行:Action Filter

  使用率最高的过滤器,在调用 Acioin 方法之前和之后执行代码。跟 Resource Filter 很类似,但 Model Binding 在之后执行。

  第4执行:Exception Filter

  用于为应用程序执行异常处理策略。

  第5执行:Result Filter

  当 Action 执行完成后,最后会执行过滤器。用于处理ActionResult结果输出策略。

  2、默认执行顺序

  当管道的某个阶段存在多个过滤器时,过滤器执行的默认顺序由作用域确定:全局过滤器优先于控制器过滤器,控制器过滤器优先于Action方法过滤器。

  提示

  每个控制器的基类Controller包含OnActionExecuting和OnActionExecuted方法。其中OnActionExecuting在所有过滤器之前调用,OnActionExecuted在所有过滤器之后调用。

  3、覆盖默认执行顺序

  您可以通过实现IOrderedFilter接口来覆盖默认的执行顺序。此接口公开了Order属性表示优先级,以确定执行顺序;具有较低Order值的过滤器将在具有较高Order值的过滤器之前执行前置方法;具有较低Order值的过滤器将在具有较高Order值的过滤器之后执行后置方法。

  您可以使用构造函数参数设置Order属性:

  [MyFilter(Name = "Controller Level Attribute", Order=1)]

  过滤器执行时,Order属性的优先级高于作用域。过滤器首先按Order属性排序,然后再按作用域排序。所有内置过滤器实现IOrderedFilter接口并将Order值默认设置为0;因此,除非设置Order属性为非零值,否则按作用域的优先级执行。