ASP.NET Core 1.0 入門——Application Startup


ASP.NET Core 1.0 入門——Application Startup

警告

您當前查看的頁面是未經授權的轉載!
如果當前版本排版錯誤,請前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnet5-application-startup.html

提示

更新時間:2016年01月20日。

Startup 類

在 ASP.NET Core 1.0 中,Startup 類是一個應用的入口點,我們可以為不同環境配置不同的內容。

編譯器會查找項目文件夾下的所有 *.cs 文件進行編譯,而運行時會尋找所有命名空間下類名為 Startup 的類作為啟動方式。

注解

可以通過設置 project.json 文件選擇需要(或不需要)編譯的文件和文件夾;也可以設置在不同的程序集中搜索 Startup 類。

Startup 類必須定義一個 Configure 方法,也可以同時定義一個 ConfigureServices 方法。

Startup 類的構造函數

構造函數,可以幫我們設置配置文件的位置,比如下面的代碼設置了 appsettings.json 。

public Startup(IHostingEnvironment env)
{
    // 設置 配置文件 的位置
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    if (env.IsDevelopment())
    {
        // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}

默認的 appsettings.json 內容如下:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

ConfigureServices 方法

ConfigureServices 用來定義我們使用了哪些服務,比如MVC、EF、Identity、Logging、Route;也可以自定義一些服務。 這里定義的服務是基於依賴注入(Dependency Injection)的。 在ASP.NET Core 1.0中,依賴注入技術的是被大量使用的。

下面的例子中,配置了EntityFramework(用於數據訪問,需要在 appsettings.json 中正確設置連接字符串)、Identity(用於身份驗證/即登錄)和MVC。

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

在調用過 ConfigureServices 之后,運行時會調用 Configure 方法。

Configure 方法

Configure 方法用於加載各種需要的中間件,類似於傳統的 OWIN(Open Web Interface for .NET)。 Configure 方法簽名必須包含 IApplicationBuilder 的參數,也可以包含一些其他的五福 IHostingEnvironmentILoggerFactory 的參數。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //在控制台中輸出log
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    //在開發環境下,顯示錯誤詳細信息
    if (env.IsDevelopment())
    {
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        //否則,導向錯誤頁面
        app.UseExceptionHandler("/Home/Error");

        // 創建數據庫
        try
        {
            using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                .CreateScope())
            {
                serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
                    .Database.Migrate();
            }
        }
        catch { }
    }

    app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());

    //允許訪問wwwroot文件夾下的靜態文件
    app.UseStaticFiles();

    //設置身份驗證方式
    app.UseIdentity();

    // 設置MVC路由
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

警告

設置MVC的路由方式必須在 Configure 中設置,僅在 ConfigureServices 中設置是無效的。

其他資源

ASP.NET 官方文檔

聲明 知識共享許可協議

ASP.NET Core 1.0 入門——Application Startup勤奮的小孩 創作,采用 知識共享 署名-相同方式共享 4.0 國際 許可協議進行許可。
本許可協議授權之外的使用權限可以從 http://space.cnblogs.com/msg/send/qin-nz 處獲得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM