ASP.NET Core 1.0 靜態文件、路由、自定義中間件、身份驗證簡介

概述

ASP.NET Core 1.0是ASP.NET的一個重要的從新設計。 例如,在ASP.NET Core中,使用Middleware編寫請求管道。 ASP.NET Core中間件對HttpContext執行異步邏輯,而後可選地調用序列中的下一個中間件或直接終止請求。 您一般經過在Configure方法中對IApplicationBuilder調用相應的擴展方法來使用中間件。 中間件組件的示例能夠是路由和安全認證(Identity)。html

在本文中,將探討一些ASP.NET Core 1.0功能,包括如何使用中間件組件甚至建立自定義組件。git

須要ASP.NET Core 1.1版本的靜態文件、路由、自定義中間件、身份驗證簡介點擊此處跳轉github

目錄

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

先決條件

完成此模塊須要如下內容:web

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

練習

此模塊包括如下練習:數據庫

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

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

注意:首次啓動Visual Studio時,必須選擇一個預約義的設置集合。 每一個預約義集合旨在匹配特定的開發樣式,並肯定窗口布局,編輯器行爲,智能感知代碼片斷和對話框選項。 本模塊中的過程描述了在使用「常規開發設置」集合時,在Visual Studio中完成給定任務所需的操做。 若是爲開發環境選擇不一樣的設置集合,那麼您應該考慮的步驟可能會有所不一樣。瀏覽器

練習1:使用靜態文件

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

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

 

 

任務1 - 提供靜態文件

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

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

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

2. 在「新建項目」對話框中,選擇Visual C#|下的ASP.NET Web應用程序 Web選項卡,並確保選擇.NET Framework 4.6。 將項目命名爲MyWebApp,選擇一個位置,而後單擊肯定。

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

3. 在「新建ASP.NET項目」對話框中,選擇「ASP.NET 5模板下的空模板」。 單擊「肯定」。

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

4. 將Microsoft.AspNet.StaticFiles包添加爲project.json的依賴項。

"dependencies": {
  "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
},

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

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

    app.UseStaticFiles();

    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)
{
    app.UseIISPlatformHandler();

    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添加到依賴關係部分

"dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final"
},

2. 在解決方案資源管理器中,右鍵單擊MyWebApp項目,而後選擇添加| 新文件夾,並將文件夾命名爲控制器。

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

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

namespace MyWebApp.Controllers
{
     using Microsoft.AspNet.Mvc;

     public class HomeController : Controller
     {
          [HttpGet()]
          public string Index() => "Hello from MVC!";
     }
}

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)
{
    app.UseIISPlatformHandler();

    app.UseFileServer();

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

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. 打開Visual Studio 2015並選擇文件| 新項目...使用ASP.NET Web應用程序模板啓動一個新的解決方案,將其命名爲MiddlewareApp,單擊肯定,而後在ASP.NET 5模板下選擇空模板

2. 打開Startup.cs文件,並使用如下代碼片斷替換Configure方法的內容,該代碼片斷建立在hello world代理以前運行的內聯中間件,hello world代理爲查詢字符串中的當前請求設置文化。

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

    app.Use((context, next) =>
    {
        var cultureQuery = context.Request.Query["culture"];
        if (!string.IsNullOrWhiteSpace(cultureQuery))
        {
            var culture = new CultureInfo(cultureQuery);
#if !DNXCORE50
            Thread.CurrentThread.CurrentCulture = culture;
            Thread.CurrentThread.CurrentUICulture = culture;
#else
            CultureInfo.CurrentCulture = culture;
            CultureInfo.CurrentUICulture = culture;
#endif
        }

        // Call the next delegate/middleware in the pipeline
        return next();
    });

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

3. 解決丟失的using語句。

4. 運行應用程序。 要在操做中查看中間件,請經過添加文化查詢字符串來設置文化,例如 http://localhost:64165/?culture=no

 

任務2 - 將中間件移動到本身的類型

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

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

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

RequestCultureMiddleware.cs

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;

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

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

RequestCultureMiddleware.cs

public Task Invoke(HttpContext context)
{
    var cultureQuery = context.Request.Query["culture"];
    if (!string.IsNullOrWhiteSpace(cultureQuery))
    {
        var culture = new CultureInfo(cultureQuery);
#if !DNXCORE50
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
#else
        CultureInfo.CurrentCulture = culture;
        CultureInfo.CurrentUICulture = culture;
#endif
    }

    // 調用管道中的下一個代理/中間件
    return this.next(context);
}

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

RequestCultureMiddleware.cs的文件底部

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

5. 回到應用程序的Startup.cs文件中,使用對app.UseRequestCulture()方法的調用替換內聯中間件委託,以將新的中間件類添加到HTTP管道。 完成後,您的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 IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
{
    return builder.UseRequestCulture(new RequestCultureOptions());
}

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包的引用。

"dependencies": {
  "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final"
},

4. 回到Startup.cs文件中,在做爲連接方法建立ConfigurationBuilder對象以後當即添加對.AddJsonFile(「config.json」)的調用。

public class Startup
{
    private readonly IConfiguration configuration;

    public Startup()
    {
        var configuration = new ConfigurationBuilder()
            .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. 打開project.json文件,並在依賴關係節點中添加對Microsoft.Extensions.OptionsModel包的引用。

"dependencies": {
  "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
  "Microsoft.Extensions.OptionsModel": "1.0.0-rc1-final"
},

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

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

3. 更新RequestCultureMiddlewareExtensions類,刪除帶有options參數的方法,並在另外一個方法中調用UseMiddleware <RequestCultureMiddleware>,以下面的代碼片斷所示。

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

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

app.UseRequestCulture();

5. 在位於同一文件中的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");
    });
}

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

 

練習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,選擇一個位置,而後單擊肯定。

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

3. 在「新建ASP.NET項目」對話框中,選擇ASP.NET 5模板下的Web應用程序模板。 此外,請確保「身份驗證」選項設置爲「我的用戶賬戶」。 單擊「肯定」繼續。

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

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

Microsoft.AspNet.Identity.EntityFramework包

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

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項目並選擇管理用戶祕密。

選擇管理用戶祕密

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/CodeLabs-WebDev

備註

本文章所說起的Asp.NET Core RC1,可能比目前版本低一些,可是不影響文中所述的結構和知識點。但願本文對你有所幫助。

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

相關文章
相關標籤/搜索