文章出處

概述

之前寫過一篇關于《ASP.NET Core 1.0 靜態文件、路由、自定義中間件、身份驗證簡介》的文章,主要介紹了ASP.NET Core中StaticFile、Middleware、CustomizeMiddleware和Asp.NetCore Identity。但是由于所有的ASP.NET Core的版本有些老,所以,此次重寫一次。使用最新的ASP.NET Core 1.1版本。對于ASP.NET Core 1.1 Preview 1會在以后的文章中介紹

目錄

  • 使用靜態文件
  • 使用路由
  • 編寫自定義中間件
  • 向Web應用程序添加身份驗證

先決條件

完成此模塊需要以下內容:

  • Visual Studio Community 2015或更高版本
  • ASP.NET Core 1.0

練習

此模塊包括以下練習:

  1. 使用靜態文件
  2. 路由和MVC簡介
  3. 構建中間件類
  4. 向Web應用程序添加身份驗證

估計完成此模塊的時間:60分鐘

注意:首次啟動Visual Studio時,必須選擇一個預定義的設置集合。 每個預定義集合旨在匹配特定的開發樣式,并確定窗口布局,編輯器行為,智能感知代碼片段和對話框選項。 本模塊中的過程描述了在使用“常規開發設置”集合時,在Visual Studio中完成給定任務所需的操作。 如果為開發環境選擇不同的設置集合,那么您應該考慮的步驟可能會有所不同。

練習1:使用靜態文件

靜態文件(包括HTML文件,CSS文件,圖像文件和JavaScript文件)是應用程序將直接提供給客戶端的資產。

在本練習中,您將配置項目以提供靜態文件。

 

 

任務1 - 提供靜態文件

為了提供靜態文件,您必須配置中間件以向管道添加靜態文件。 這是通過從Startup.Configure方法調用UseStaticFiles擴展方法來實現的。

在此任務中,您將創建一個空的ASP.NET Core 1.0項目并將其配置為提供靜態文件。

1. 打開Visual Studio 2015并選擇文件| 新項目...開始一個新的解決方案

2. 在“新建項目”對話框中,選擇Visual C#|下的ASP.NET Web應用程序 Web選項卡,并確保選擇.NET Framework 4.6。 將項目命名為Asp.NET_Core_TEST,選擇一個位置,然后單擊確定。

image_thumb2

創建新的ASP.NET Web應用程序項目

3. 在“新建ASP.NET項目”對話框中,選擇“ASP.NET Core Templates”。 單擊“確定”。

image_thumb6

使用ASP.NET Core空模板創建新項目

4. 將Microsoft.AspNet.StaticFiles包添加為project.json的依賴項,可以在dependencies節點下添加。

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    
"Microsoft.AspNetCore.StaticFiles": "1.1.0"
,
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
  },

   當然,也可以通過Nuget添加相關的依賴包

image_thumb10

5. 打開Startup.cs文件,并在Hello中間件之前的Configure方法中添加UseStaticFiles方法調用。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    //添加靜態文件支持管道
    app.UseStaticFiles();
    //添加靜態文件和默認文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

6. 在wwwroot文件夾中創建一個名為index.html的文件,其中包含以下內容。

<!DOCTYPE html>
<html>
<head>
     <meta charset="utf-8" />
     <title>Hello static world!</title>
</head>
<body>
     <h1>Hello from ASP.NET Core!</h1>
</body>
</html>

7. 運行應用程序并導航到根。 它應該顯示hello world中間件。

8. 導航到index.html,它應該顯示wwwroot中的靜態頁面。

 

 

任務2 - 添加默認文檔支持

為了讓您的Web應用程序提供默認頁面,而用戶不必完全限定URI,就可以使用UseDefaultFiles擴展方法。 此方法是實際上不提供文件的URL重寫程序。

除了UseStaticFilesUseDefaultFiles擴展方法之外,還有一個方法 - UseFileServer - 組合這兩種方法的功能以及UseDirectoryBrowser擴展方法。

在此任務中,您將使用UseFileServer啟用服務靜態和默認文件。

1. 打開Startup.cs文件,將Configure方法中的靜態文件中間件從app.UseStaticFiles()更改為app.UseFileServer()。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    //添加靜態文件支持管道
     app.UseStaticFiles();
    //添加靜態文件和默認文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

2. 再次運行應用程序。 導航到網站根目錄時,應顯示默認頁面index.html

 

練習2:路由和MVC簡介

路由是映射到處理程序的URL模式。 處理程序可以是物理文件,例如Web Forms應用程序中的.aspx文件。 處理程序也可以是處理請求的類,例如MVC應用程序中的控制器。

ASP.NET路由使您能夠使用不必映射到網站中特定文件的URL。 由于網址不必映射到文件,因此您可以使用描述用戶操作的網址,因此用戶更容易理解。

在本練習中,您將了解如何在應用程序中配置路由。

任務1 - 添加MVC

ASP.NET MVC為您提供了一個強大的,基于模式的方式來構建動態網站,使清晰分離的問題,并讓您完全控制標記的愉快,敏捷開發。 ASP.NET MVC包括許多功能,創建使用最新的Web標準的復雜應用程序。

在此任務中,您將配置項目以使用ASP.NET MVC并配置示例路由。

1. 打開project.json文件并將Microsoft.AspNet.Mvc添加到依賴關系部分。并添加runtimes節點,保證正常運行

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    
"Microsoft.AspNetCore.Mvc": "1.1.0"
,
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
  },
//添加運行環境的系統變量
  //當前系統環境為win10-x64
  //對于.NETCore包后報錯,需要根據系統環境進行修改
  //可選環境包括:win10-x64, win81-x64, win8-x64, win7-x64
  "runtimes": {
    "win10-x64": {}
  },

2. 在解決方案資源管理器中,右鍵單擊Asp.NET_Core_TEST項目,然后選擇添加| 新文件夾,并將文件夾命名為Controllers

3. 右鍵單擊新文件夾,然后選擇添加| 新項目...,選擇MVC控制器類,命名文件HomeController.cs并單擊添加。

4. 使用以下代碼段替換文件的內容。

namespace Asp.NET_Core_TEST.Controllers
{
    public class HomeController : Controller
    {
        // GET: /<controller>/
        [HttpGet]
        public string Index()
        {
            return "Hello form MVC HomeController";
        }
    }
}

5. 現在,打開Startup.cs文件,將MVC服務和中間件添加到配置中,添加services.AddMvc()并使用UseMvc方法替換Configure方法中的app.Run方法調用,如下面的代碼片段所示。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    //添加靜態文件支持管道
    app.UseStaticFiles();

    //添加靜態文件和默認文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();

    //配置AspNetCore.MVC的路由
app.UseMvc(routes =>

    {
        routes.MapRoute(
            name: 
"default", template: "{controller=Home}/{action=Index}/{id?}"
);
    });
    //該管道可代替上面的默認路由,如果需要其余配置,可以通過上面的方式手工編寫
    app.UseMvcWithDefaultRoute();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

6. 運行網站并通過導航到/ home端點驗證從MVC控制器返回的消息。

注意:ASP.NET Core MVC還包括一個方便的新實用程序方法,app.UseMvcWithDefaultRoute,因此您不必記住模板字符串。

 

練習3:編寫自定義中間件

可以合并到HTTP請求管道中的小應用程序組件統稱為中間件。 ASP.NET Core 1.0具有對中間件的集成支持,它們在應用程序啟動期間在應用程序的Configure方法中連接。

在本練習中,您將創建一個基于查詢字符串值設置當前文化的中間件類。

注意:我們在本練習中使用本地化相關中間件作為示例場景,但在大多數應用程序中,您將使用ASP.NET Core的內置支持本地化支持。

任務1 - 編寫一個基于查詢字符串值設置當前文化的中間件類

中間件是組裝到應用程序管道中以處理請求和響應的組件。 每個組件可以選擇是否將請求傳遞到管道中的下一個組件,并且可以在管道中的下一個組件之前和之后執行某些操作。 請求代理用于構建此請求管道,然后用于處理對應用程序的每個HTTP請求。

請求代理使用傳遞到啟動類中的配置方法的IApplicationBuilder類型上的Run(運行),Map(映射)和Use(使用)擴展方法進行配置。 單個請求委托可以作為匿名方法在線指定,也可以在可重用類中定義。 這些可重用的類是中間件或中間件組件。 請求管道中的每個中間件組件負責調用鏈中的下一個組件,或者如果適當,選擇將鏈短路。

在此任務中,您將創建內聯中間件。

1. 在之前的Asp.NET_Core_TEST解決方案基礎上,為src文件夾添加一個新的項目,選擇.NET Core中的Class Library(.NET Core),并命名為MiddlewareApp,單擊確定。

image_thumb12

2. 打開Asp.NET_Core_Test下的Startup.cs文件,并使用以下代碼片段替換Configure方法的內容,該代碼片段創建在靜態文件管道代理之前運行的內聯中間件,代理為查詢字符串中的當前請求設置文化。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.Use((context, next) 
=>

    {
        
var cultureQuery = context.Request.Query["culture"]; if (!string.IsNullOrWhiteSpace(cultureQuery)) { var culture = new CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture = culture; } // Call the next delegate/middleware in the pipeline return next(); }); app.Run(async (context) =>

    {
        
await context.Response.WriteAsync($"Hello {CultureInfo.CurrentCulture.DisplayName}"
);
    });

    //添加靜態文件支持管道
    app.UseStaticFiles();

    //添加靜態文件和默認文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();

    //配置AspNetCore.MVC的路由
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    //該管道可代替上面的默認路由,如果需要其余配置,可以通過上面的方式手工編寫
    app.UseMvcWithDefaultRoute();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

 

3. 解決丟失的using語句。

image_thumb19

4. 運行應用程序。 要在操作中查看中間件,請通過添加文化查詢字符串來設置文化,例如 http://localhost:64165/?culture=zh-cn和http://localhost:64165/?culture=en-us

image_thumb22

image_thumb27

 

 

任務2 - 將中間件移動到自己的類型

在此任務中,您將中間件移動到一個單獨的文件。

1. 右鍵單擊MiddlewareApp項目,然后選擇添加| 類...,將文件命名為RequestCultureMiddleware.cs,然后單擊添加。

2. 添加一個構造函數,它接受一個RequestDelegate參數并使用以下代碼段將其分配給一個私有字段。 在需要時繼續解析丟失的using語句。

RequestCultureMiddleware.cs

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;

    public RequestCultureMiddleware(RequestDelegate next)
    {
        this.next = next;
    }
}

image_thumb30

3. 添加以下方法與先前添加到Startup.cs文件的內聯中間件委派的內容。

RequestCultureMiddleware.cs

namespace MiddlewareApp
{
    public class RequestCultureMiddleware
    {
        private readonly RequestDelegate next;
        public RequestCultureMiddleware(RequestDelegate next)
        {
            this.next = next;
        }
        public Task Invoke(HttpContext context)
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
            }
            
            // 調用管道中的下一個代理/中間件
            return this.next(context);
        }
    }
}

4. 在文件的底部(也可單獨出來),添加一個類,通過IApplicationBuilder上的擴展方法公開中間件。

RequestCultureMiddleware.cs的文件底部

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>();
    }
}

5. 回到程序集Asp.NET_Core_TEST中,添加MiddlewareApp的Core類庫引用,在Startup.cs文件中,使用對app.UseRequestCulture()方法的調用替換內聯中間件委托,以將新的中間件類添加到HTTP管道。 完成后,您的Configure方法應如下所示:

image_thumb32

Startup.cs的Configure方法

public void Configure(IApplicationBuilder app)
{
    app.UseIISPlatformHandler();

    app.UseRequestCulture();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync($"Hello {CultureInfo.CurrentCulture.DisplayName}");
    });

}

6. 運行應用程序,并驗證中間件現在作為類運行。

 

任務3 - 向中間件添加選項

在此任務中,您將更新RequestCultureMiddleware實現以支持將默認文化設置為配置值。

1. 右鍵單擊MiddlewareApp項目并選擇添加| 類...,將文件命名為RequestCultureOptions.cs,然后單擊添加。

2. 在新類中,將具有CultureInfo的名為DefaultCulture的屬性添加為類型,解析丟失的依賴關系。

public class RequestCultureOptions
{
    public CultureInfo DefaultCulture { get; set; }
}

3. 打開RequestCultureMiddleware.cs文件,并更新RequestCultureMiddleware構造函數以接受RequestCultureOptions參數,如以下代碼段所示。

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;
    private readonly RequestCultureOptions options;

    public RequestCultureMiddleware(RequestDelegate next, RequestCultureOptions options)
    {
        this.next = next;
        this.options = options;
    }

    //...
}

4. 如果在查詢字符串中未指定任何內容,請更新中間件的Invoke方法以使用選項中的DefaultCulture屬性,如以下代碼段所示。

public Task Invoke(HttpContext context)
{
    CultureInfo requestCulture = null;

    var cultureQuery = context.Request.Query["culture"];
    if (!string.IsNullOrWhiteSpace(cultureQuery))
    {
        requestCulture = new CultureInfo(cultureQuery);
    }
    else
    {
        requestCulture = this.options.DefaultCulture;
    }

    if (requestCulture != null)
    {
#if !DNXCORE50
        Thread.CurrentThread.CurrentCulture = requestCulture;
        Thread.CurrentThread.CurrentUICulture = requestCulture;
#else
        CultureInfo.CurrentCulture = requestCulture;
        CultureInfo.CurrentUICulture = requestCulture;
#endif
    }

    return this.next(context);
}

5. 在同一文件中,使用以下代碼片段替換RequestCultureMiddlewareExtensions類實現,該代碼片段向使用RequestCultureOptionsUseRequestCulture方法添加了一個重載,并將它們傳遞到UseMiddleware <RequestCultureMiddleware>調用中。

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>();
    }
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder, RequestCultureOptions options)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>(options);
    }
}

6. 打開Startup.cs文件,并將配置方法中的后備文化設置為某些默認值,例如。 “zh-cn”。

app.UseRequestCulture(new RequestCultureOptions
{
     DefaultCulture = new CultureInfo("zh-cn")
});

7. 運行應用程序,并驗證當沒有指定查詢字符串時,默認文化與配置的匹配。

 

 

任務4 - 從文件讀取請求文化配置

ASP.NET Core的配置系統已經從早期版本的ASP.NET重新構建,后者依賴于System.Configuration和XML配置文件,如web.config。 新的配置模型提供了可以從各種提供程序檢索的基于鍵/值的設置的簡化訪問。 然后,應用程序和框架可以使用新的選項模式訪問已配置的設置。

在此任務中,您將使用從JSON文件加載RequestCultureOptions的默認文化值的新配置系統。

 

1. 打開Startup.cs文件并添加一個名為配置類型IConfiguration的新的私有類字段,解析IConfiguration的丟失依賴關系。

public class Startup
{
    private readonly IConfiguration configuration;

    // ...
}

2. 添加一個新的構造函數,使用ConfigurationBuilder在構造函數中創建一個新的Configuration對象,并將其分配給您在上一步中創建的配置類字段。

public Startup()
{
    var configuration = new ConfigurationBuilder()
        .Build();

    this.configuration = configuration;
}

3. 打開project.json文件,并在依賴關系節點中添加對Microsoft.Extensions.Configuration.Json包的引用。也可以通過Nuget引用。

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0",
    "MiddlewareApp": "1.0.0-*"
  },

Nuget引用

image

4. 回到Startup.cs文件中,在作為鏈接方法創建ConfigurationBuilder對象之后立即添加對.AddJsonFile(“config.json”)的調用。

private readonly IConfiguration configuration;
public Startup(IHostingEnvironment env)
{
    var configuration = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)  //設置程序路徑為根路徑
        .AddJsonFile("config.json")
        .Build();

    this.configuration = configuration;
}

5. 右鍵單擊MiddlewareApp項目并選擇添加| 新建項目...,選擇JSON文件作為模板,將文件命名為config.json,然后單擊添加。

6. 在新的config.json文件中,添加一個新的鍵/值對“culture”:“zh-cn”。

{
  "culture": "zh-cn"
}

7. 打開Startup.cs文件并更新代碼以使用新的配置系統設置默認文化。

app.UseRequestCulture(new RequestCultureOptions
{
     DefaultCulture = new CultureInfo(this.configuration["culture"] ?? "zh-cn")
});

8. 運行應用程序并驗證默認文化是配置文件中配置的文件。

9. 在config.json文件中將文化值更新為“zh”,并刷新頁面(不更改任何其他代碼)。 請注意,消息未更改,因為僅在應用程序啟動時讀取配置。

10. 回到Visual Studio并按Ctrl + Shift + F5重新啟動Web服務器。

11. 返回瀏覽器并刷新頁面; 它應該顯示更新的消息。

 

任務5 - 從依賴注入系統到中間件的流程選項

ASP.NET Core是從根本上設計的,支持和利用依賴注入。 ASP.NET Core應用程序可以通過將它們注入到Startup類中的方法中來利用內置框架服務,并且應用程序服務也可以配置為注入。 ASP.NET Core提供的默認服務容器提供了一個最小的功能集,并不用于替換其他容器。

在此任務中,您將使用依賴注入系統配置RequestCultureMiddleware選項。

 

1. 更改RequestCultureMiddleware構造函數以使用IOptions <RequestCultureOptions>而不是RequestCultureOptions并獲取options參數的值。 解決丟失的依賴關系。

public RequestCultureMiddleware(RequestDelegate next, IOptions<RequestCultureOptions> options)
{
    this.next = next;
    options = options.Value;
}

2. 更新RequestCultureMiddlewareExtensions類,刪除帶有options參數的方法,并在另一個方法中調用UseMiddleware <RequestCultureMiddleware>,如下面的代碼片段所示。

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
         return builder.UseMiddleware<RequestCultureMiddleware>();
    }
}

3. 在Startup.cs中,將UseRequestCulture中間件更改為不接受任何參數。

app.UseRequestCulture();

4. 在位于同一文件中的ConfigureServices方法中,使用services.Configure <RequestCultureOptions>方法添加一行配置文化,并添加對AddOptions方法的調用,如下面的代碼片段所示。

public void ConfigureServices(IServiceCollection services)
{
    // DI的設置選項
    services.AddOptions();

    services.Configure<RequestCultureOptions>(options =>
    {
        options.DefaultCulture = new CultureInfo(this.configuration["culture"] ?? "zh-cn");
    });
}

5. 運行應用程序并驗證是否正在從依賴注入系統中配置選項。

 

練習4:向Web應用程序添加身份驗證

ASP.NET Identity是一個成員資格系統,它允許您向應用程序添加登錄功能。 用戶可以使用用戶名和密碼創建帳戶和登錄,也可以使用Facebook,Google,Microsoft帳戶,Twitter等外部登錄提供程序。

在本練習中,您將了解使用ASP.NET Identity的ASP.NET Core項目模板的默認配置,以及將Facebook配置為應用程序中的外部登錄提供程序。

任務1 - ASP.NET Identity簡介

在此任務中,您將了解ASP.NET Core項目模板如何使用ASP.NET Identity添加注冊,登錄和注銷用戶的功能。

1. 打開Visual Studio 2015并選擇文件| 新| 項目...創建一個新的解決方案。

2. 在“新建項目”對話框中,選擇Visual C#|下的ASP.NET Web應用程序 Web選項卡,并確保選擇.NET Framework 4.6。 將項目命名為MyWebApp,選擇一個位置,然后單擊確定。

image

創建新的ASP.NET Web應用程序項目

3. 在“新建ASP.NET項目”對話框中,選擇ASP.NET 5模板下的Web應用程序模板。 此外,請確保“身份驗證”選項設置為“個人用戶帳戶”。 單擊“確定”繼續。

image

使用Web應用程序模板創建新項目

4. 項目創建后,打開project.json文件并找到Microsoft.AspNet.Identity.EntityFramework軟件包。 此包具有實體框架實現的ASP.NET Identity,將持久化ASP.NET身份數據和模式到SQL Server。

image

Microsoft.AspNet.Identity.EntityFramework包

5. 展開解決方案資源管理器中的References節點,然后展開DNX 4.5.1中的Microsoft.AspNet.Identity.EntityFramework包。 注意,它取決于Microsoft.AspNet.Identity,它是ASP.NET Identity系統的主要參考匯編。 此程序集包含ASP.NET Identity的核心接口集。

image

Microsoft.AspNet.Identity.EntityFramework包依賴項

6. 打開Startup.cs文件并找到ConfigureServices方法。 在此方法中,身份服務由以下代碼配置。

public void ConfigureServices(IServiceCollection services)
{
     // ...

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

     // ...
}

7. 在同一文件中,找到在啟動執行流程中調用ConfigureServices方法后調用的Configure方法。 在此方法中,當調用UseIdentity方法時,將為應用程序啟用ASP.NET Identity。 這會向請求管道添加基于Cookie的身份驗證。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     // ...

     app.UseIdentity();

     // ...
}

8. 打開位于Controllers文件夾的AccountController.cs文件,并找到具有HttpPost屬性的Register操作。 此操作調用UserManager服務根據RegisterViewModel信息創建和登錄用戶。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            // ...

            await _signInManager.SignInAsync(user, isPersistent: false);

            // ...

9. 使用HttpPost屬性找到Login操作。 此操作使用SignInManager服務的PasswordSignInAsync方法對用戶進行簽名。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
        if (result.Succeeded)
        {
            // ...

10. 現在,找到LogOff操作。 此操作調用SignInManager服務的SignOutAsync方法,清除存儲在Cookie中的用戶聲明。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LogOff()
{
    await _signInManager.SignOutAsync();
    _logger.LogInformation(4, "User logged out.");
    return RedirectToAction(nameof(HomeController.Index), "Home");
}

11. 運行解決方案并通過單擊注冊以查看ASP.NET Identity系統的操作來創建新用戶。 您可以調試AccountController中的不同操作。

帳戶注冊視圖

12. 注冊第一個用戶后,您會看到一條錯誤消息,提示您應用現有遷移。 單擊應用遷移。 您現在將看到您以新用戶身份登錄。

13. 停止應用程序并瀏覽數據庫,方法是導航到SQL Server對象資源管理器視圖中的(localdb)MSSQLLocalDB / Databases / aspnet5-MyWebApp- / Tables。 右鍵單擊dbo.AspNetUsers表并選擇“查看數據”以查看創建的用戶的屬性。

在SQL Server對象資源管理器中查看用戶數據

任務2 - 使用外部提供程序啟用身份驗證

ASP.NET Core支持使用OAuth 2.0使用來自外部認證提供程序(如Facebook,Twitter,LinkedIn,Microsoft或Google)的憑據登錄。 在您的網站中啟用社交登錄憑據提供了顯著的優勢,因為數百萬用戶已經擁有這些外部提供商的帳戶。 如果他們不必創建和記住一組新的憑據,這些用戶可能更傾向于注冊您的網站。

在此任務中,您將創建一個Facebook應用程序并配置您的Web應用程序項目(需要翻個墻),以使用戶能夠使用其Facebook帳戶作為外部提供商登錄。

1. 在瀏覽器中,導航到https://developers.facebook.com/apps,然后通過輸入您的Facebook憑據登錄。如果您尚未注冊為Facebook開發人員,請單擊注冊為開發人員,并按照說明注冊。

2. 在Facebook的開發人員主頁上,通過單擊添加新應用程序并從平臺選擇中選擇網站添加新的應用程序。

3. 在“網站快速入門”頁面上,選擇“跳過并創建應用程序ID”。

4. 設置顯示名稱,例如ASP.NET社交登錄,并選擇類別,例如業務,然后按創建應用程序ID。

5. 在設置頁面的基本部分中,單擊添加平臺以指定要添加網站應用程序。

6. 從平臺選項中選擇網站,添加您的網站網址(例如https:// localhost:44300 /),然后點擊下面的保存更改。

7. 記下您的應用程序ID和應用程序密鑰,以便您以后可以將它們添加到您的ASP.NET核心網站。

8. 切換回Visual Studio,右鍵單擊MyWebApp項目并選擇管理用戶秘密。

image

選擇管理用戶秘密

9.  在secrets.json文件中添加以下代碼,將占位符替換為從Facebook獲取的值。

{
  "Authentication": {
     "Facebook": {
        "AppId": "<your-app-id>",
        "AppSecret": "<your-app-secret>"
     }
  }
}

10. 打開project.json文件并添加Microsoft.AspNet.Authentication.Facebook包作為依賴關系

"dependencies": {
      ...
      "Microsoft.AspNet.Authentication.Facebook":  "1.0.0-rc1-final"
},

11. 打開startup.cs文件,并在Configure方法中添加Facebook中間件,如以下代碼段所示。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // ...

    app.UseIdentity();

    app.UseFacebookAuthentication(options =>
    {
        options.AppId = Configuration["Authentication:Facebook:AppId"];
        options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    });

    // ...
}

12. 運行應用程序并導航到登錄頁面,您將看到Facebook按鈕。

使用Facebook按鈕登錄頁面

源碼下載地址:https://github.com/smallprogram/Asp.NET_Core_TEST

備注

本文章所提及的Asp.NET Core 1.1 preview 1,是目前的最新版本,之后會寫一篇專門介紹Asp.NET Core 1.1 preview 1的文章。盡情期待。希望本文對你有所幫助。

轉載請注明出處:http://www.cnblogs.com/smallprogram/


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()