Kol*_*Net 19 c# asp.net-core-mvc asp.net-core asp.net-core-1.0
在ASP.NET Core RC 1中,我使用以下代码检索上下文的值(页面的完整地址).然后我在配置中记录了这个值.
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
private IHostingEnvironment CurrentEnvironment { get; set; }
private IHttpContextAccessor HttpContextAccessor { get; set; }
public Startup(IHostingEnvironment env,
IHttpContextAccessor httpContextAccessor)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
CurrentEnvironment = env;
HttpContextAccessor = httpContextAccessor;
}
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOptions();
services.Configure<WebAppSettings>(configuration);
services.Configure<WebAppSettings>(settings =>
{
...
settings.WebRootPath = CurrentEnvironment.WebRootPath;
settings.DomainUrl = HttpContextAccessor.HttpContext.Request.Host.ToUriComponent();
});
}
}
Run Code Online (Sandbox Code Playgroud)
现在我开始在ASP.NET Core 1.0上更新项目.但在网站发布期间,我收到以下错误:
System.InvalidOperationException尝试激活"MyProject.Startup"时,无法解析类型"Microsoft.AspNetCore.Http.IHttpContextAccessor"的服务.
在Microsoft.Extensions.Internal.ConstructorMatcher.CreateInstance(的IServiceProvider提供商)在Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(的IServiceProvider提供商,类型instanceType,对象[]参数)在Microsoft.Extensions.Internal.ActivatorUtilities.GetServiceOrCreateInstance(的IServiceProvider提供商型型)在Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(的IServiceProvider提供商,型型)在Microsoft.AspNetCore.Hosting.Internal.StartupLoader.LoadMethods(的IServiceProvider服务,类型startupType,串environmentName)在Microsoft.AspNetCore.Hosting.< > c__DisplayClass1_0.b__1(IServiceProvider sp)位于Microsoft.Extensions.Dependency.IpendencyInjection(ServiceProvider提供程序)中的Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider提供程序),位于Microsoft.Extensions.DependencyInjection.SingletonCallSite.Invoke(ServiceProvider)提供者)在Microsoft.Extens 在Microsoft.Extensions.DependencyInjection上的Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider提供程序,类型serviceType)上的Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型serviceType)中的ions.DependencyInjection.<> c__DisplayClass12_0.b__0(ServiceProvider提供程序). Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()中的Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()上的Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup()中的.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider)
.NET Framework X64 v4.0.30319.42000 | Microsoft.AspNetCore.Hosting版本1.0.0-rtm-21431 | Microsoft Windows 6.1.7601 S.
如何在应用程序启动期间获取新版本IHttpContextAccessor?
Ole*_*syk 62
它不再是默认服务.您必须在Startup.cs中配置它
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
更新:在ASP.NET Core 2.1中,添加了AddHttpContextAccessor辅助扩展方法以正确注册IHttpContextAccessor具有正确生命周期(单例).因此,在ASP.NET Core 2.1及更高版本中,代码应该是
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
资料来源:https://github.com/aspnet/Hosting/issues/793
Mua*_*mer 13
对于.Net 6,您可以通过这种方式添加
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24833 次 |
| 最近记录: |