2 Вопрос: Блокировка политикой CORS althouht настраивается в веб-API [дубликат]

вопрос создан в Wed, May 8, 2019 12:00 AM
    

На этот вопрос уже есть ответ здесь:

    

Я запускаю приложение ASP.NET Core Angular, я добавил контроллер Api в приложение Core и пытаюсь сделать вызов API из приложения Angular, приложение Core размещается на 58181, а приложение Angular на 44337, когда я попытаться вызвать Api от Angular получить

Access to XMLHttpRequest at 'http://localhost:58181/api/authenticate/login' from origin 'https://localhost:44337' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

Я настраиваю Cors в API

   services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy", policy =>
                {
                    policy.AllowAnyOrigin()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                });
            });
  app.UseCors("CorsPolicy");

Я пытаюсь вызвать API как этот

 register() {
    var body = {
      UserName: this.formModel.value.UserName,
      Email: this.formModel.value.Email,
      FullName: this.formModel.value.FullName,
      Password: this.formModel.value.Passwords.Password
    };
    return this.http.post(this.BaseURI + '/authenticate/register', body, {
      headers: new HttpHeaders({ 
      'Access-Control-Allow-Origin':'*',
      'Content-Type': 'application/json',
      'Authorization':'authkey',
      'userid':'1'
    })});
  }

Я ожидаю вызова моего контроллера аутентификации и входа в систему /регистрации моего пользователя, и приложение Angular, и Apis будут находиться на одном локальном хосте, на разных портах.

    
0
  1. Вам действительно не нужно устанавливать заголовок Content-Type, если вы используете HttpClient. Кроме того, Access-Control-Allow-Origin - это заголовок ответа от вызова Options, сделанный для перекрестного источника запрос. Так что вам не нужно устанавливать это и в заголовках ваших запросов.
    2019-05-08 16: 45: 43Z
  2. 2019-05-08 18: 14: 08Z
  3. Угловые приложения запускаются в браузере, у них нет порта. Я немного запутался, как у вас два разных порта. Вы используете angular-cli и проксируете свои запросы с ng-serve и proxy-conf? У вас есть два основных приложения?
    2019-05-08 21: 27: 47Z
2 ответа                              2                         

Ваш код должен быть таким. Убедитесь, что промежуточное программное обеспечение находится в правильном порядке

 services.AddCors();
 services.AddMvc();

 app.UseCors(builder => builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
 app.UseMvc();
    
0
2019-05-09 04: 23: 40Z

Чтобы включить CORS, ниже приведен код:

  1. В веб-проекте я добавил файл crossdomain.xml в корневой каталог, в котором находится содержимое
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->

    <!-- Most restrictive policy: -->
    <site-control permitted-cross-domain-policies="none"/>
</cross-domain-policy>
  1. В файле конфигурации веб-проекта web.config добавьте тег:
<location path="crossdomain.xml">
    <system.webServer>
      <staticContent>
        <clear />
        <mimeMap fileExtension=".xml" mimeType="text/x-cross-domain-policy" />
      </staticContent>
    </system.webServer>
  </location>
  1. Другое изменение в стороне WEB API в файле конфигурации: AngularJS Allow-Origin to WebApi2

Спасибо

    
0
2019-05-09 04: 34: 03Z
источник размещен Вот