无法在IIS上运行Asp Net Core API

时间:2019-06-13 09:18:06

标签: c# iis asp.net-core asp.net-core-webapi iis-express

我有一个ASP Net Core Web API。

我可以使用 dotnet 命令运行它,它应在https://localhost:5001/上启动(应该如此),并且一切正常。

但是,当我尝试使用 IIS Express 或使用 IIS 启动api时,它将无法访问该页面,并给我错误500.30

Browser error

我已在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关闭。

然后,我在事件查看器中也出现了错误(意大利语): Event viewer error

最后,这是 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();
    }

更新2

我发现了该程序的某些较旧版本,但它们也不起作用。

所以现在我想知道这是我的问题还是其他问题?

也许有更新?我真的不知道。

2 个答案:

答案 0 :(得分:1)

我建议您调用ConfigureKestrel而不是UseKestrel:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#how-to-use-kestrel-in-aspnet-core-apps

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-单击答案中提供的链接。请注意,您可能需要配置更多属性,如该链接中所述。