[英]Membership provider in ASP.Net Core app
我正在強制將成員資格提供程序添加到ASP.Net Core應用程序的配置中的問題。 我必須添加它,因為它引用了包含舊代碼的舊項目,並引用了System.Web.ApplicationServices
的程序集。 在此程序集中,流程進行到行,該行檢查提供程序的名稱是否不為null。
if ( providerName == null || SystemWebProxy.Membership.Providers[providerName] == null )
{
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, ApplicationServicesStrings.Membership_provider_name_invalid), "providerName" );
}
但是無論如何,我在appsettings.json
添加了必要的實現:
"Membership": {
"DefaultProvider": "blahblah",
"Providers": {
"Add": {
...
"Name": "blahblah"
...
}
}}
在啟動類中,我通過以下方式配置sqlMembershipProvider
:
services.Configure<System.Web.Security.SqlMembershipProvider>(Configuration.GetSection("Membership"));
有人可以告訴我,為什么我不將提供程序實現到配置中嗎? 也許我走錯路了?
您可以嘗試類似的方法:
首先,定義用於處理appsettings.json的類
public class MembershipSettings{
public string DefaultProvider { get; set; }
public Provider Provider { get; set; }
}
public class Provider
{
public string Name { get; set; }
public string ConnectionStringName { get; set; } //not sure if it works
public string ApplicationName { get; set; }
//etc
}
然后從SqlMembershipProvider繼承
internal class CustomeSqlMembershipProvider : SqlMembershipProvider
{
public CustomeSqlMembershipProvider(IOptions<MembershipSettings> settings)
{
InitializeProvider(settings.Value);
}
protected virtual void InitializeProvider(MembershipSettings settings)
{
base.Initialize(settings.Provider.Name, PrepareSettings(settings.Provider));
}
private NameValueCollection PrepareSettings(Provider provider) => new NameValueCollection
{
//you can use reflection to do that as well
{ nameof(provider.ApplicationName), provider.ApplicationName},
{nameof(provider.ConnectionStringName), provider.ConnectionStringName}
//...
//etc
};
}
並在Startup.cs中添加以下行:
services.Configure<MembershipSettings>(Configuration.GetSection("Membership"));
services.AddScoped<SqlMembershipProvider, CustomSqlMembershipProvider>();
最后但並非最不重要的一點是,稍微修改一下appsettings.json(可以調整MembershiSettings類和CustomSqlMembershiProvider來處理和初始化提供者列表)
"Membership": {
"DefaultProvider": "blahblah",
"Provider": {
...
"Name": "blahblah"
...
}
}
請注意,我對SqlMembershipProvider不太熟悉,因此可能存在一些缺陷。 我認為您應該編寫自己的MembershipProvider,但是如果不能(由於遺留代碼),則可以執行上述操作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.