ahm*_*ary 7 c# asp.net-core asp.net-core-6.0 .net-6.0
我正在开发 ASP.NET Core 2.2 Web 应用程序。将我的应用程序升级到 .NET 6 时遇到一些问题。
startup我的问题是.NET 6.0 中没有类,我program.cs只找到了文件。
我在我的网络应用程序上添加启动类,但我不知道如何在内部使用它Program.cs。
如何startup在 my 中添加或使用类program.cs?
这是startup.cs.NET Core 2.2 中的文件:
public class Startup
{
private readonly IConfigurationRoot configRoot;
private AppSettings AppSettings { get; set; }
public Startup(IConfiguration configuration)
{
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger();
Configuration = configuration;
IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
configRoot = builder.Build();
AppSettings = new AppSettings();
Configuration.Bind(AppSettings);
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddController();
services.AddDbContext(Configuration, configRoot);
services.AddIdentityService(Configuration);
services.AddAutoMapper();
services.AddScopedServices();
services.AddTransientServices();
services.AddSwaggerOpenAPI();
services.AddMailSetting(Configuration);
services.AddServiceLayer();
services.AddVersion();
services.AddHealthCheck(AppSettings, Configuration);
services.AddFeatureManagement();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory log)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors(options =>
options.WithOrigins("http://localhost:3000")
.AllowAnyHeader()
.AllowAnyMethod());
app.ConfigureCustomExceptionMiddleware();
log.AddSerilog();
//app.ConfigureHealthCheck();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.ConfigureSwagger();
app.UseHealthChecks("/healthz", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse,
ResultStatusCodes =
{
[HealthStatus.Healthy] = StatusCodes.Status200OK,
[HealthStatus.Degraded] = StatusCodes.Status500InternalServerError,
[HealthStatus.Unhealthy] = StatusCodes.Status503ServiceUnavailable,
},
}).UseHealthChecksUI(setup =>
{
setup.ApiPath = "/healthcheck";
setup.UIPath = "/healthcheck-ui";
//setup.AddCustomStylesheet("Customization/custom.css");
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 .NET 6 program.cs:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Run Code Online (Sandbox Code Playgroud)
如何在类startup中使用类program.cs?
更新后的帖子
一切正常,但配置服务不起作用,因为我不知道如何ILoggerFactory
实施startup
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory log)
{
}
Run Code Online (Sandbox Code Playgroud)
在program.cs上
startup.Configure(app, app.Environment,???);
Run Code Online (Sandbox Code Playgroud)
如何将记录器工厂添加为program.cs
ILoggerFactory类中的
第三个参数更新它解决了使用
var app = builder.Build();
startup.Configure(
app,
builder.Environment,
app.Services.GetRequiredService<FooService>(),
app.Services.GetRequiredService<ILoggerFactory>()
);
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何应用 swagger ui 来检查我的 api
您可以手动实例化Startup并手动调用该方法ConfigureServices和Configure:
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app, builder.Environment);
Run Code Online (Sandbox Code Playgroud)
在 ASP.NET Core 2.* 中,Startup.Configure接受注入服务:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IFooService, FooService>();
}
public void Configure(WebApplication app, IWebHostEnvironment env, IFooService fooService, ILoggerFactory loggerFactory)
{
fooService.Init();
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以 :
var app = builder.Build();
startup.Configure(
app,
builder.Environment,
app.Services.GetRequiredService<FooService>(),
app.Services.GetRequiredService<ILoggerFactory>()
);
Run Code Online (Sandbox Code Playgroud)
当我迁移 API 时,首先我考虑重用该类Startup...但最后我将配置移至扩展方法中。
新模板使用所谓的最小托管模型,但没有人阻止切换回以前使用的通用托管模型(或通过WebHost)。
如果您想使用顶级语句,您可以将Main方法的内容复制到Program.cs文件中,然后复制旧Program类中声明的所有其他方法。新的Program.cs潜力可能看起来像这样:
await CreateHostBuilder(args)
.Build()
.RunAsync();
// do not forget to copy the rest of the setup if any
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Run Code Online (Sandbox Code Playgroud)
或者只是Startup完全删除该类并将配置方法移动到新文件的相应部分(也许提取一些简洁的扩展方法)。
| 归档时间: |
|
| 查看次数: |
9680 次 |
| 最近记录: |