У нас есть разделенные серверы - WEBAPI на отдельном сервере. Я установил, что мое приложение работает на разных серверах в DEV, но я перенес один и тот же код на пару серверов TEST, и он не работает. Я не могу понять, почему. Кажется, что с сервером TEST WebApi должно быть что-то иное, но я не знаю, где искать, и у меня нет доступа к нему, чтобы заглянуть под капот, не попросив системных людей сделать это для меня.
Используемое программное обеспечение: Visual Studio 2017, C#, Javascript, HTML / CSS, Oracle, Entity Framework 6, Breeze, IIS 10
Я установил пакеты NuGet: Microsoft.As pNet .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 я добавил EnableCors с 3 источниками для сред DEV, TEST и PREPROD (я обнаружил, что наличие атрибута [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 - я получаю заголовок Access-Control-Allow-Origin, требуемый CORS:
Источник (в моих EnableCors): сервер WEBDEVINT -> Webapi: сервер SCCDEVCS * 10 17 *
В ТЕСТЕ - я получаю ошибку:
Источник (в моих 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. Но у меня два веб-приложения (UI и WebAPI) были настроены в IIS одинаково для DEV и TEST.
Может быть, это настройка IIS, которую нужно установить? Может ли это быть что-то в GA C? Я не знаю, с чего начать. Спасибо за любой совет.
Редактировать: я также попытался добавить следующие строки в web.config WebAPI с и без строки 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 on вызов метаданных. Не уверен, какие учетные данные он ищет.