我编写了一个.NET Core 2应用程序作为后端API应用程序。它在Visual Studio 2017中运行良好,并且在我的开发机器上运行良好。前端是Angular。
它在端口55564上运行.Angular在同一台服务器上运行,但是在端口80上运行。
服务器是带有IIS-7的Server 2012。我按照我在互联网上找到的说明进行设置,而且我无法让IIS为这些页面提供服务。我不断得到错误400(不是404),这似乎是某种类型的CORS问题。我在我的应用程序中实现了CORS。
当我直接在Web根目录中打开命令提示符,并使用“dotnet XXXXX.dll”直接启动Kestral时,它运行正常。一切都很好。 所以现在,它从命令提示符运行并且完美运行。这意味着它是一个配置错误,而不是在我的应用程序中。但我确实想让它从IIS运行。我真的无法弄清楚我错过了什么。
IIS 7 - 安装程序 我创建了一个标准网站。我将其设置为“无托管代码”。我设置主机头以响应'localhost:55564'。在应用程序池中,我将标识分配给具有Web根文件夹完全所有权的特定用户标识。
在我的全局HandlerMappings中。 OPTIONSVerbHandler *路径 处理程序是IsapiModule 可执行文件:%windir%\ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll
然后我将选项动词推送到第一个处理程序映射。
在我的program.cs中:
WebHost
.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
})
.CaptureStartupErrors(true)
.UseStartup<Startup>()
.UseUrls("http://*:55564")
.Build();
在我的startup.cs中,在ConfigureServices:
下services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
在我的startup.cs中,在Configure:
下app.UseAuthentication();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("CorsPolicy");
app.UseMvcWithDefaultRoute();
我的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\XXXXX.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS"/>
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
<remove name="OPTIONSVerbHandler"/>
</modules>
</system.webServer>
</configuration>
我没有想法。我看过几十个帖子。不确定我错过了什么。
但是由于它可以从命令行运行,而不是从IIS-7运行,我认为它必须是IIS-7配置问题。
答案 0 :(得分:1)
您可以尝试在startup.cs中添加UseIISIntegration()
吗?
WebHost
.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
})
.CaptureStartupErrors(true)
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("http://*:55564")
.Build();