我有一个ASP Net Core Web API。
我可以使用 dotnet 命令运行它,它应在https://localhost:5001/上启动(应该如此),并且一切正常。
但是,当我尝试使用 IIS Express 或使用 IIS 启动api时,它将无法访问该页面,并给我错误500.30 :
我已在web.config中启用了日志,结果如下:
应用程序启动异常:System.InvalidOperationException:应用程序正在IIS进程内运行,但未配置为使用IIS服务器。 在Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter。<> c__DisplayClass2_0.b__0(IApplicationBuilder应用) 在Microsoft.AspNetCore.HostFilteringStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder应用) 在Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder构建器) 在Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() 爆击:Microsoft.AspNetCore.Hosting.Internal.WebHost [6] 应用程序启动异常 System.InvalidOperationException:应用程序正在IIS进程中运行,但未配置为使用IIS服务器。 在Microsoft.AspNetCore.Server.IIS.Core.IISServerSetupFilter。<> c__DisplayClass2_0.b__0(IApplicationBuilder应用) 在Microsoft.AspNetCore.HostFilteringStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder应用) 在Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder构建器) 在Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() 托管环境:生产 内容根路径:D:_APICore 现在收听:http://localhost:5000 应用程序已启动。按Ctrl + C关闭。
最后,这是 Program.cs :
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
希望所有这些信息都有帮助。 感谢您的帮助。
StartUp.cs :
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//Authorization settings
services.AddCors(c => c.AddPolicy("Permissions", builder => {
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("Permissions"));
});
services.Configure<Values>(Configuration.GetSection("StoredValues"));
//JWT setting configuration
var appSettings = Configuration.GetSection("StoredValues");
var key = appSettings.GetValue(typeof(string), "JWTSecret").ToString();
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(key)),
ValidateIssuer = false,
ValidateAudience = false
};
});
}
// 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)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
loggerFactory.AddLog4Net();
app.UseHttpsRedirection();
app.UseMvc();
app.UseCors("Permissions");
app.UseAuthentication();
app.UseDefaultFiles();
app.UseStaticFiles();
}
我发现了该程序的某些较旧版本,但它们也不起作用。
所以现在我想知道这是我的问题还是其他问题?
也许有更新?我真的不知道。
答案 0 :(得分:1)
我建议您调用ConfigureKestrel而不是UseKestrel:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
});
答案 1 :(得分:0)
尝试删除.UseKestrel()
参考/更多信息:Host RestAPI inside IIS-单击答案中提供的链接。请注意,您可能需要配置更多属性,如该链接中所述。