【发布时间】:2020-03-30 04:03:29
【问题描述】:
我们有拆分服务器 - WEBAPI 在单独的服务器上。我让我的应用程序在 DEV 中的拆分服务器上运行,但我已将相同的代码移动到这对 TEST 服务器上,但它无法正常工作。我不知道为什么。似乎它与 TEST WebApi 服务器肯定有所不同,但我不知道在哪里查看,也无法访问它来查看引擎盖下而不要求系统人员为我做这件事。
使用的软件:Visual Studio 2017、C#、Javascript、HTML/CSS、Oracle、Entity Framework 6、Breeze、IIS 10
我安装了 NuGet 包:Microsoft.AspNet.WebApi.Cors 5.2.7 和 Microsoft.AspNetCore.Mvc.Cors 2.2.0。
在我的 \WebAPI\App_Start\WebApiConfig.cs 中,我添加了 EnableCors:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
在我的 BREEZE 和 MVC 控制器中,我为 DEV、TEST 和 PREPROD 环境添加了具有 3 个来源的 EnableCors(我确实发现 [Authorize] 属性的存在导致它不起作用。不得不评论一下出):
using System.Web.Http.Cors;
namespace SCC.WebAPI.Controllers
{
//[Authorize]
[BreezeController]
[EnableCors(origins: “http://webdevint.scc.state.va.us,http://in.scctest2new.scc.state.va.us,http://in.sccpreweb5.scc.state.va.us", headers: "*", methods: "*")]
public class LookupController : ApiController
{
DEV 工作正常,TEST 不工作。
在 DEV 上 - 我得到了 CORS 所需的 Access-Control-Allow-Origin 标头:
来源(在我的 EnableCors 中):WEBDEVINT 服务器 --> Webapi:SCCDEVCS 服务器
在测试中 - 我收到一个错误:
来源(在我的 EnableCors 中):SCCTEST2NEW 服务器 --> Webapi:SCCTESTAPP 服务器
ERROR: “Access to XMLHttpRequest at 'http://scctestapp.scc.state.va.us/EFIWEBAPI/breeze/Lookup/Metadata' from origin 'http://in.scctest2new.scc.state.va.us' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”
如果我输入它试图访问地址栏的 URL:'http://scctestapp.scc.state.va.us/EFIWEBAPI/breeze/Lookup/Metadata',
它工作得很好。返回元数据。所以我知道请求的 URL 是正确的。
注意:我还在我的控制器中尝试了以下操作,但没有任何不同 - 我知道允许任何服务器发起消息都有一点安全风险:
[EnableCors(origins: "*", headers: "*", methods: "*")]
TEST 服务器与 DEV 服务器似乎有些不同。但是我在 IIS 中设置了两个 webapp(UI 和 WebAPI),在 DEV 和 TEST 上设置的方式完全相同。
会不会是需要设置的 IIS 设置?会不会是 GAC 中的某事?我不知道从哪里开始寻找。感谢您的建议。
编辑: 我还尝试在 WebAPI web.config 中添加和不包含 Credentials 行的以下行:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://in.scctest2new.scc.state.va.us" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
但它在元数据调用上给了我一个 401 Unauthorized。不确定它在寻找什么凭据。
【问题讨论】:
标签: javascript asp.net-mvc controller cors webapi