我试图了解 ASP.NET Core 管道的工作原理。我想使用StaticFileMiddleware并传入一些选项。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var staticFileOptions = new StaticFileOptions();
app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions);
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,出现以下错误
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()
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用
app.UseStaticFiles(staticFileOptions);
Run Code Online (Sandbox Code Playgroud)
但是,由于这是一个学习练习,我想换个说法。
小智 8
这是我对同一问题的处理方法。
只需使用您想要传递的属性创建新类:
public class LoggingOption
{
public bool ToLog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是如何初始化
app.UseMiddleware<LoggingMiddleware>(Options.Create(new LoggingOption{ ToLog = true }));
Run Code Online (Sandbox Code Playgroud)
这是构造函数
public LoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions<LoggingOption> options)
{
_next = next;
_logger = loggerFactory.CreateLogger<LoggingMiddleware>();
_toLog = options.Value.ToLog;
}
Run Code Online (Sandbox Code Playgroud)
代替
app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions);
Run Code Online (Sandbox Code Playgroud)
使用
app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(Microsoft.Extensions.Options.Options.Create(staticFileOptions));
Run Code Online (Sandbox Code Playgroud)
(或将 粘贴Microsoft.Extensions.Options为 using 和 call Options.Create)
实际代码中UseStaticFiles是这样实现的
| 归档时间: |
|
| 查看次数: |
5052 次 |
| 最近记录: |