ASP.NET Core 1.0升级到配置服务中的ASP.NET Core 2.0升级身份验证 - 如何在Core 2.0中使用Fields?

时间:2017-11-18 12:17:03

标签: c# asp.net-core asp.net-core-2.0

我正在使用已经工作且需要从Core 1.0迁移到Core 2.0的代码,并且需要在服务身份验证中使用和迁移字段。如何在Core 2.0中使用Fields? (我也查看了Microsoft的迁移文档,但找不到任何内容。)https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

public void ConfigureServices(IServiceCollection services)

我遇到以下问题:(如何在Core 2.0中添加以下内容)

Fields = { "email", "last_name", "first_name" },

以下是我的代码。

ASP.NET Core 1.0

app.UseFacebookAuthentication(new FacebookOptions
{
    AppId = Configuration["Authentication:Test:Facebook:AppId"],
    AppSecret = Configuration["Authentication:Test:Facebook:AppSecret"],
    Fields = { "email", "last_name", "first_name" },
});

需要迁移到ASP.NET Core 2.0

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["Authentication:Test:Facebook:AppId"];
    facebookOptions.AppSecret = Configuration["Authentication:Test:Facebook:AppSecret"];
});

1 个答案:

答案 0 :(得分:1)

Fields是只读的,但您可以修改其内容。举个例子,代码级迁移可能如下所示:

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["Authentication:Test:Facebook:AppId"];
    facebookOptions.AppSecret = Configuration["Authentication:Test:Facebook:AppSecret"];
    facebookOptions.Fields.Clear();
    facebookOptions.Fields.Add("email");
    facebookOptions.Fields.Add("last_name");
    facebookOptions.Fields.Add("first_name");
});

然而,这实际上并不是必需的,因为它们是set by default。请参阅来源的代码段:

public FacebookOptions()
{
    // ...
    Fields.Add("name");
    Fields.Add("email");
    Fields.Add("first_name");
    Fields.Add("last_name");
    // ...
}

看起来即使在ASP.NET核心的previous version中也没有必要,但是您的代码可以正常工作,因为您只是替换默认值(没有name)。如果您确实不想要name,请使用facebookOptions.Fields.Remove(“name”)