我写了一个APICore2应用程序作为后端.NET应用程序。它在Visual Studio 2017中运行得很好,在我的开发机器上也运行得很好。前端是有角度的。
它在端口55564上运行。Angular运行在同一台服务器上,但端口是80。
服务器是带有IIS-7的server 2012。我根据我在互联网上找到的说明设置了它,但我无法让IIS为页面提供服务。我不断收到错误400 (而不是404),这似乎是某种类型的CORS问题。我在我的应用程序中实现了CORS。
当我直接在web根目录中打开命令提示符,并使用'dotnet XXXXX.dll‘直接启动Kestral时,它工作得很好。一切都运行得很好。所以现在,它是从命令提示符运行的,并且工作得很好。这意味着这是一个配置错误,而不是在我的应用程序中。但我确实想让它从IIS运行。我真的不知道我错过了什么。
IIS 7-设置我创建了一个标准网站。我将其设置为“无托管代码”。我设置了主机标头来响应'localhost:55564‘。在应用程序池中,我将身份分配给对web根文件夹拥有完全所有权的特定userid。
在我的全局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配置问题。
发布于 2018-01-21 10:56:13
你能试着在你的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();https://stackoverflow.com/questions/48363088
复制相似问题