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

来源:http://www.cnblogs.com/smallprogram/archive/2016/11/14/6062459.html
-Advertisement-
Play Games

概述 ASP.NET Core 1.0是ASP.NET的一個重要的重新設計。 例如,在ASP.NET Core中,使用Middleware編寫請求管道。 ASP.NET Core中間件對HttpContext執行非同步邏輯,然後可選地調用序列中的下一個中間件或直接終止請求。 您通常通過在Configu... ...


概述

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

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

目錄

  • 使用靜態文件
  • 使用路由
  • 編寫自定義中間件
  • 向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。 將項目命名為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

備註

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目大意:有3個整數 x[1], a, b 滿足遞推式x[i]=(a*x[i-1]+b)mod 10001。由這個遞推式計算出了長度為2T的數列,現在要求輸入x[1],x[3],......x[2T-1], 輸出x[2],x[4]......x[2T]. T<=100,0<=x<=10000. 如果 ...
  • 2016年9月20日至2016年11月12日,從學校圖書館借來的《明解c語言》看完了。 大三第一個學期,前8周,有c語言程式設計的課。課本是學校里的老師編寫出版的,為了壓縮空間,減少頁面,書中的代碼都擠成了一團,一點兒美感都沒有。課後習題的參考代碼輸入電腦後,運行錯誤,仔細看一遍,是最基本的邏輯問題 ...
  • 第一步:入口文件增加 第二步:修改config文件,我這裡路由模式設置為2 效果展示: ...
  • gvim的菜單亂碼解決方法: (亂碼是由於系統內碼不相容導致,系統內碼包括gb2312 gb18030 utf-8 utf-16[unicode]等) 生成文件 ~/.gvimrc 並添加如下語句:set encoding=chineseset langmenu=zh_CN.GBKset imcmd... ...
  • 第一次寫技術博客,還有些興奮呢。我是CrazyCatJack,大家可以叫我CCJ或者瘋貓。我即將成為一名嵌入式Linux的驅動工程師,現在還是一枚大四狗,呼呼~大學期間做了一些項目和比賽,都是基於32位的MCU(例如STM32、Freescale K60),這些呢都是根據網上的視頻,PDF自學的。現 ...
  • 來自:http://sspai.com/27403/ Finder 是 Mac 電腦的系統程式,有的功能類似 Windows 的資源管理器。它是我們打開 Mac 首先見到的「笑臉」,有了它,我們可以組織和使用 Mac 里的幾乎所有東西,包括應用程式、文件、文件夾、磁碟以及你網路上的共用磁碟,你同時可 ...
  • ipcs 1. 命令格式 ipcs [resource-option] [output-format] ipcs [resource-option] -i id 2. 命令功能 提供IPC設備的信息 3. 使用方法 resource選項: ipcs -m 查看系統共用記憶體信息 ipcs -q 查看系 ...
  • 1.命令格式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 2. 命令功能 在文件目錄層級中查找文件並做相應的處理 3. 命令選項 -name finename 按照文件名查找文件,文件名可使用通配符 -per ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...