Seb*_*ull 4 c# asp.net basic-authentication dnx asp.net-core
我目前正在尝试编写AuthenticationMiddleware.看到这个答案.应用程序构建没有错误,但当我执行时,dnx web我收到以下错误:
无法找到"Namespace.BasicAuthenticationMiddleware"类型的合适构造函数.确保类型是具体的,并且构造函数接受所有参数.
在Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider,Type instanceType,Object []参数)
在Microsoft.AspNet.Builder.UseMiddlewareExtensions.<> c__DisplayClass2_0.b__0(RequestDelegate next)
在Microsoft.AspNet.Builder.Internal.ApplicationBuilder.Build()
在Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()
失败:Microsoft.AspNet.Hosting.Internal.HostingEngine [7]
我确信我使用的构造函数签名在某种程度上是错误的,但我无法为此找到合适的文档,因为似乎有几十个已弃用的文档.
这是AuthenticationMiddleware:
public class BasicAuthenticationMiddleware : AuthenticationMiddleware<BasicAuthOptions>
{
public BasicAuthenticationMiddleware(
RequestDelegate next,
BasicAuthOptions options,
ILoggerFactory loggerFactory,
IUrlEncoder urlEncoder)
: base(next, options, loggerFactory, urlEncoder) {}
protected override AuthenticationHandler<BasicAuthOptions> CreateHandler()
{
return new BasicAuthenticationHandler();
}
}
Run Code Online (Sandbox Code Playgroud)
BasicAuthOptions:
public class BasicAuthOptions : AuthenticationOptions {
public const string Scheme = "BasicAuth";
public BasicAuthOptions()
{
AuthenticationScheme = Scheme;
AutomaticAuthenticate = true;
}
}
Run Code Online (Sandbox Code Playgroud)
BasicAuthenticationExtensions
public static class BasicAuthenticationExtensions
{
public static void UseBasicAuthentication(this IApplicationBuilder builder) {
builder.UseMiddleware<BasicAuthenticationMiddleware>(new ConfigureOptions<BasicAuthOptions>(o => new BasicAuthOptions()));
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs:
public class Startup
{
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; set; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddAuthorization(options => {
options.AddPolicy(BasicAuthOptions.Scheme, policy => policy.Requirements.Add(new BasicAuthRequirement()));
});
}
// 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(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseBasicAuthentication();
app.UseMvc();
}
// Entry point for the application.
public static void Main(string[] args) => Microsoft.AspNet.Hosting.WebApplication.Run<Startup>(args);
}
Run Code Online (Sandbox Code Playgroud)
您的UseBasicAuthentication扩展程序尝试注入ConfigureOptions您的中间件不作为参数的实例.
只需按顺序流动选项实例:
public static class BasicAuthenticationExtensions {
public static void UseBasicAuthentication(this IApplicationBuilder builder) {
builder.UseMiddleware<BasicAuthenticationMiddleware>(new BasicAuthOptions());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |