asp.net-core - 如何 UseMiddleware<Type>(...) 并传入选项?

标签 asp.net-core

我试图了解 ASP.NET Core 管道的工作原理。我想使用 StaticFileMiddleware 并传入一些选项。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var staticFileOptions = new StaticFileOptions();
    app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions);
}

当我运行我的应用程序时,出现以下错误

System.InvalidOperationException: A suitable constructor for type 'Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
    at Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters)
    at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass3_0.<UseMiddleware>b__0(RequestDelegate next)
    at Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build()
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

我明白我可以使用

app.UseStaticFiles(staticFileOptions);

但是,由于这是一个学习练习,我想换个说法。

最佳答案

这是我解决同一问题的方法。

只需使用您想要传递的属性创建新类:

public class LoggingOption
{
    public bool ToLog { get; set; }
}

这是如何初始化

app.UseMiddleware<LoggingMiddleware>(Options.Create(new LoggingOption{ ToLog = true }));

这是构造函数

 public LoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions<LoggingOption> options)
        {
            _next = next;
            _logger = loggerFactory.CreateLogger<LoggingMiddleware>();
            _toLog = options.Value.ToLog;
        }

关于asp.net-core - 如何 UseMiddleware<Type>(...) 并传入选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876333/

相关文章:

asp.net-core - 如何更新自包含的 asp.net 核心应用程序并避免文件锁定

ASP.NET 5 自定义错误页面未在 Azure 网站上呈现

c# - 该属性是接口(interface)类型 ('IFormFile' ) MVC Core

asp.net-core - .Net 核心 SQL 缓存依赖

在每个请求问题中创建的 JSON ContractResolver

asp.net - IFormFile 上传图像 ASP.NET core MVC 始终显示空值

asp.net-core - 如何在 MVC Core 中绑定(bind)数组

asp.net-core - Asp.net core web api - 扩展属性路由生成

c# - 预加载包括使用 UseLazyLoadingProxies

angular - Azure AD 2.0 应用程序 - 无法从 Angular 客户端访问范围