zoukankan      html  css  js  c++  java
  • Owin管道与asp.net管道模型

    ------2016.3.6 更新 文中提到没有Microsoft.Owin.Host.SystemWeb 这个dll 便不会加载Startup.Configuration,因为这个dll 其中有个OwinHttpModul. 网站回加载这个modul然后在这里面实现了owin的管道(ps 就是 把owin定义的模块挂载到httpapplication的 几个事件上)。

    最近一直没搞懂在 mvc5框架中 为什么存在 Global.asax.cs和Startup.cs 文件... 

    然后搜索下面文章:

    http://stackoverflow.com/questions/20168978/do-i-need-a-global-asax-cs-file-at-all-if-im-using-an-owin-startup-cs-class-and

    其中提到 

    1、Application_Start 会比Startup.Configuration 先启动 

    2、mvc4 版本一致性 布啦布啦....

    3、 Global.asax.cs 可以处理一些特殊事件 例如 Application_Start Application_Error Session_Start 等等

    4、Startup.Configuration 中可以配置 关于授权之类的(替代原先的Application_AuthenticateRequest,另外mvc5中引入了ASP.NET Identity 2,而这个基于Owin)

    5、最最重要的一条如果 引用集没有Microsoft.Owin.Host.SystemWeb 这个dll 便不会加载Startup.Configuration

    ----------------------分割线----------------------------------

    ok 进入另一个话题 owin 的管道有什么 首先贴下微软的PipelineStage

     1 namespace Owin
     2 {
     3   /// <summary>
     4   /// An ordered list of known Asp.Net integrated pipeline stages. More details on the ASP.NET integrated pipeline can be found at http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
     5   /// 
     6   /// </summary>
     7   public enum PipelineStage
     8   {
     9     Authenticate,
    10     PostAuthenticate,
    11     Authorize,
    12     PostAuthorize,
    13     ResolveCache,
    14     PostResolveCache,
    15     MapHandler,
    16     PostMapHandler,
    17     AcquireState,
    18     PostAcquireState,
    19     PreHandlerExecute,
    20   }
    21 }

    看注释 去看 httpapplication事件。。。个人感觉Owin管道里的事件是可以替代原先的httpapplication事件的。。。

    --------------------------------------------分割线-----------------------------------------------------

    既然说到Startup.Configuration可以替代 那怎么用才是关键,直接上代码:

     1 public void Configuration(IAppBuilder app)
     2 {
     3     app.Use((context, next) =>
     4     {
     5         PrintCurrentIntegratedPipelineStage(context, "Middleware 1");
     6         return next.Invoke();
     7     });
     8     app.Use((context, next) =>
     9     {
    10         PrintCurrentIntegratedPipelineStage(context, "2nd MW");
    11         return next.Invoke();
    12     });
    13     app.UseStageMarker(PipelineStage.Authenticate);
    14     app.Run(context =>
    15     {
    16         PrintCurrentIntegratedPipelineStage(context, "3rd MW");
    17         return context.Response.WriteAsync("Hello world");
    18     });
    19     app.UseStageMarker(PipelineStage.ResolveCache);
    20 }

    看代码中红色部分。。。 使用app.UseStageMarker(xxxx状态)之前的代码 便是xxxx状态注册。

    注意:

      1、如果不是用UseStageMarker标记 那些中间件的位置 所有的位置为:PreHandlerExecute。

      2、多次使用UseStageMarker 不能 前面顺序比后面大。。。

          相关链接:http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline

    ----------------------------分割线-----------------------------------------------------------

    个人一些闲言碎语

    貌似 asp.net5 里 mvc框架 中没有了Global.asax.cs文件 入口就是Startup.cs 

    还有 个人感觉  IOwinConent 会替代 HttpAplication ;OwinMiddleware 替代IHttpModule ( 当然这是指 asp.net5里,而mvc5中还是 混搭风格),app.Use(xxxxxx)构成的 管道还是 相对好理解的 

    不过现在asp.net 还是 rc等出了 rtm再来更新吧。。。。

     贴下 asp.net5中Startup

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Threading.Tasks;
      5 using Microsoft.AspNet.Builder;
      6 using Microsoft.AspNet.Hosting;
      7 using Microsoft.AspNet.Identity.EntityFramework;
      8 using Microsoft.Data.Entity;
      9 using Microsoft.Extensions.Configuration;
     10 using Microsoft.Extensions.DependencyInjection;
     11 using Microsoft.Extensions.Logging;
     12 using WebApplication2.Models;
     13 using WebApplication2.Services;
     14 
     15 namespace WebApplication2
     16 {
     17     public class Startup
     18     {
     19         public Startup(IHostingEnvironment env)
     20         {
     21             // Set up configuration sources.
     22             var builder = new ConfigurationBuilder()
     23                 .AddJsonFile("appsettings.json")
     24                 .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
     25 
     26             if (env.IsDevelopment())
     27             {
     28                 // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
     29                 builder.AddUserSecrets();
     30             }
     31 
     32             builder.AddEnvironmentVariables();
     33             Configuration = builder.Build();
     34         }
     35 
     36         public IConfigurationRoot Configuration { get; set; }
     37 
     38         // This method gets called by the runtime. Use this method to add services to the container.
     39         public void ConfigureServices(IServiceCollection services)
     40         {
     41             // Add framework services.
     42             services.AddEntityFramework()
     43                 .AddSqlServer()
     44                 .AddDbContext<ApplicationDbContext>(options =>
     45                     options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
     46 
     47             services.AddIdentity<ApplicationUser, IdentityRole>()
     48                 .AddEntityFrameworkStores<ApplicationDbContext>()
     49                 .AddDefaultTokenProviders();
     50 
     51             services.AddMvc();
     52 
     53             // Add application services.
     54             services.AddTransient<IEmailSender, AuthMessageSender>();
     55             services.AddTransient<ISmsSender, AuthMessageSender>();
     56         }
     57 
     58         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
     59         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
     60         {
     61             loggerFactory.AddConsole(Configuration.GetSection("Logging"));
     62             loggerFactory.AddDebug();
     63 
     64             if (env.IsDevelopment())
     65             {
     66                 app.UseBrowserLink();
     67                 app.UseDeveloperExceptionPage();
     68                 app.UseDatabaseErrorPage();
     69             }
     70             else
     71             {
     72                 app.UseExceptionHandler("/Home/Error");
     73 
     74                 // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
     75                 try
     76                 {
     77                     using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
     78                         .CreateScope())
     79                     {
     80                         serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
     81                              .Database.Migrate();
     82                     }
     83                 }
     84                 catch { }
     85             }
     86 
     87             app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());
     88 
     89             app.UseStaticFiles();
     90 
     91             app.UseIdentity();
     92 
     93             // To configure external authentication please see http://go.microsoft.com/fwlink/?LinkID=532715
     94 
     95             app.UseMvc(routes =>
     96             {
     97                 routes.MapRoute(
     98                     name: "default",
     99                     template: "{controller=Home}/{action=Index}/{id?}");
    100             });
    101         }
    102 
    103         // Entry point for the application.
    104         public static void Main(string[] args) => WebApplication.Run<Startup>(args);
    105     }
    106 }
  • 相关阅读:
    Codeforces Round #632 (Div. 2) D-Challenges in school №41(模拟好题)
    余数求和
    B. 齐心抗疫
    MyBatis源码分析
    关于Idea中右边的maven projects窗口找不到了如何调出来
    IDEA java类文件左下角出现红色的J标识,解决方法
    Postman Tests脚本的使用
    JSONPath解析json
    Postman + Newman 生成测试报告
    TestNG 多线程测试
  • 原文地址:https://www.cnblogs.com/rufus-hua/p/5157662.html
Copyright © 2011-2022 走看看