mvc webapi CORS отрицают при развертывании на новом сервере - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть работающая служба ASP.Net MVC Web API, работающая на производственном сервере (prod.mydomain.com).Когда я скопировал файлы и папки на промежуточный сервер (stage.mydomain.com) и сервер разработки (dev.mydomain.com), служба Web API выдает ошибку CORS, когда веб-приложения, запущенные на промежуточном сервере или сервере разработки, вызываютвеб-API с помощью пользовательской библиотеки C # helper.Однако Web API работает, если в вызовах используется Angular $ resource.Спасибо за вашу помощь.

EnableCORS в контроллере Web API:

[EnableCors(origins: "http://localhost:4200,http://dev.mydomain.com,http://stage.mydomain.com, , headers: "*", methods: "*", SupportsCredentials = true)]

Вызов со страницы ASP.Net выглядит следующим образом:

public class User_Controller {
  public static UserProfile getUserProfileFromWebApi(string networkName) {
    UserProfile thisProfile = HelpersLib.WebApiBroker.Get< UserProfile> (
      System.Configuration.ConfigurationManager.AppSettings["UserProfile_Service"],
      "User/Profile/" + networkName).Result;

    return thisProfile;
  }
}

Вызов с использованием Angular $ resource выглядит следующим образом:

(function() {
  'use strict';

  var moduleName = 'userProfileFactoryModule';
  var factoryName = 'userProfileFactory';
  var requiredModules = ["ngResource", "configModule"];
  var dependencyInjection = ['$resource', 'api', 'userAccount', internalFunc];

  angular.module(moduleName, requiredModules)
    .factory(factoryName, dependencyInjection);

  function internalFunc($resource, api, userAccount) {
    function getUserProfile() {
      return $resource(api.userProfile + 'user/profile/:NN', {
        NN: '@NN'
      });
    };

    return {
      //usage: userProfileFactory.getUserProfile()
      getUserProfile /*public method*/: getUserProfile /*internal method above*/
    }
  }
})();

Сервисная библиотека C # выглядит следующим образом:

public namaspace HelpersLib {
  public static class WebApiBroker {

    public static async Task <T> Get <T> (string baseUrl, string urlSegment) {
      string content = string.Empty;
      using(HttpClient client = GetClient(baseUrl)) {
        //reference http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

        HttpResponseMessage response = await client.GetAsync(urlSegment.TrimStart('/')).ConfigureAwait(false);
        if (response.IsSuccessStatusCode) {
          content = await response.Content.ReadAsStringAsync();
        }
        return JsonConvert.DeserializeObject <T> (content);
      }
    }

    public static HttpClient GetClient(string svcLocation) {
      string myUri = svcLocation;
      CredentialCache cc = new CredentialCache();
      cc.Add(new Uri(myUri), "NTLM", CredentialCache.DefaultNetworkCredentials);

      HttpClientHandler handler = new HttpClientHandler();
      handler.Credentials = cc;
      HttpClient client = new HttpClient(handler);
      client.BaseAddress = new Uri(myUri);
      client.DefaultRequestHeaders.Accept.Clear();
      client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
      return client;
    }
  }
}
...