Deployment 将信号器通知中心部署到IIS时出现CORS错误
我的signalR Hub可以在安全端口44311上的VS2019调试模式下正常运行,但只要我将其发布到我的开发设备上的本地IIS,Deployment 将信号器通知中心部署到IIS时出现CORS错误,deployment,iis-7,signalr,signalr-hub,Deployment,Iis 7,Signalr,Signalr Hub,我的signalR Hub可以在安全端口44311上的VS2019调试模式下正常运行,但只要我将其发布到我的开发设备上的本地IIS,。/Hub/协商就会失败,并出现CORS策略异常 ex.在调试模式下,IIS托盘 信号集线器正常启动: 现在转到本地Window 10 IIS设置,我在其中部署了signalR Hub项目: 我设置了https绑定 我已成功设置SSL证书,并设置了“需要SSL”复选框: 我重新启动我的IIS网站,浏览44311进行测试 但果不其然,我的应用程序无法连接到
。/Hub/协商
就会失败,并出现CORS策略
异常
ex.在调试模式下,IIS托盘
信号集线器正常启动:
现在转到本地Window 10 IIS设置,我在其中部署了signalR Hub项目:
访问位于的XMLHttpRequest'https://localhost:44311/hub/negotiate?negotiateVersion=1“起源”http://localhost:4200'已被CORS策略阻止:
对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标题。
POSThttps://localhost:44311/hub/negotiate?negotiateVersion=1 net::ERR_失败
然而在我的代码中,我注入了CORS:
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.AspNetCore.Http;
使用Microsoft.AspNetCore.Http.Connections;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Hosting;
使用NotificationHub.Hubs;
命名空间通知中心
{
公营创业
{
只读字符串MyAllowedSpecificOrigins=“\u MyAllowedSpecificOrigins”;
public void配置服务(IServiceCollection服务)
{
services.AddCors(选项=>
{
options.AddPolicy(名称:MyAllowedSpecificOrigins,
生成器=>{
建筑商。来源(“https://localhost:4200“,“本地主机:4200”)
.SetIsOriginAllowedToAllowWildcardSubdomains()的
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((主机)=>true);
}
);
});
services.AddSignalR(hubOptions=>{
hubOptions.EnableDetailedErrors=true;
hubOptions.KeepAliveInterval=System.TimeSpan.FromMinutes(1000);
});
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
app.UseHttpsRedirection();
app.UseRouting();
应用程序UseCors(MyAllowedSpecificOrigins);
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//app.UseSession();
app.UseEndpoints(端点=>
{
endpoints.MapHub(“/hub”,选项=>{
options.Transports=HttpTransportType.WebSockets | HttpTransportType.LongPolling;
});
endpoints.MapGet(“/”,异步上下文=>
{
wait context.Response.WriteAsync(“通知中心已启动!”);
});
});
}
}
}
确保已启用iis.net功能。在iis中为站点启用目录浏览:
1) 启动IIS管理器
2) 在IIS管理器中,展开服务器名称,展开网站,然后选择网站
3) 在功能视图中,双击目录浏览
4) 在操作窗格中,单击启用
在web.config文件中添加以下代码:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://my-external-app-domain.com" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Request-Headers" value="User-Agent,Content-Type,Authorization,X-RequestDigest,X-ClientService-ClientTag" />
<add name="Access-Control-Request-Method" value="GET,POST,HEAD,OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
更新:
将以下内容添加到web.config:
“访问控制请求头”中都需要HttpRequest和x-Request-with。此外,我插入了与请求标头具有相同值的标头name=“Access Control Allow Headers”。您的问题解决了吗?如果您的问题得到解决,那么我请求您将有用的建议标记为答案。这将帮助其他面临同样问题的人。如果你的问题仍然存在,那么试着参考社区成员给出的解决方案。@JalpaPanchal-你是对的。但发生的事情是,在尝试使用ssl和digi证书部署我的整个开发解决方案后,我破坏了它。然后,7月4日假期到来,我终于重建了我的开发环境。我必须尽快在本地部署端重新讨论这个问题。为了解决CORS错误,我修改了web.config CustomHeaders部分。在“访问控制请求头”
中都需要HttpRequest和x-Request-with。此外,我插入了与Request-Headers值相同的headername=“Access Control Allow Headers”
。仅供参考:我已经按照建议安装了CORS模块。这是我在向web.confg添加标题之前的第一步。至此,我的cors问题已解决,谢谢。现在我面临的问题是,我的前端http://localhost:55271/hub/negotiate?negotiateVersion=1
在IIS中心网站运行时抛出404未找到
。如果在vs2019调试模式下运行(并在IIS中关闭集线器站点),则连接集线器时不会出现问题。也许是单独发布的吧?Jalpa-plesae请参阅我在帖子中的更新部分。那里的web.config值对我有用。请相应更新您的答案;再次感谢您的帮助。@bob.mazzo当然我会更新我的帖子。对于这个新问题,您可以生成新帖子。