config.EnableCors () иногда работает, а иногда нет - PullRequest
0 голосов
/ 03 ноября 2018

Я использую config.EnableCors() для работы cors в webapi.

Работает и загружает сайт нормально, но иногда при переходе на другую страницу выдает ошибки cors.

OPTIONS http://localhost:54234/api/questions 405 (Method Not Allowed)

edit:1 Access to XMLHttpRequest at 'http://localhost:54234/api/questions' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Может кто-нибудь помочь с этим?

1 Ответ

0 голосов
/ 03 ноября 2018

У меня были похожие проблемы с включением CORS в веб-API. Я попробовал несколько разных подходов, но они частично решили проблему.

Вот как я решил (не знаю, где я тогда читал об этом решении):

Добавьте следующую конфигурацию в файл веб-конфигурации; some_address должен быть заменен на адрес (а), который обращается к вашему веб-API. Если у вас несколько адресов, разделите их знаком ';'.

<?xml version="1.0" encoding="utf-8"?>
<configuration> 
  <appSettings>
    <add key="CorsOriginsSetting" value="http://localhost:54323" /> 
  </appSettings> 
</configuration> />

Добавьте следующий код в ваш проект веб-API:

using System.Configuration;
using System.Threading.Tasks;
using System.Web.Cors;
using Microsoft.Owin.Cors;
using Owin;

namespace MyWebAPI
{ 
    public partial class Startup
    { 
        public void ConfigureCors(IAppBuilder app)
        {
            var corsPolicy = new CorsPolicy
            {
                AllowAnyMethod = true,
                AllowAnyHeader = true, 
            };

            var origins = ConfigurationManager.AppSettings["CorsOriginsSetting"];

            if (origins != null)
            {
                foreach (var origin in origins.Split(';'))
                {
                    corsPolicy.Origins.Add(origin);
                }
            }
            else
            {
                corsPolicy.AllowAnyOrigin = true;
            }

            var corsOptions = new CorsOptions
            {
                PolicyProvider = new CorsPolicyProvider
                {
                    PolicyResolver = context => Task.FromResult(corsPolicy),
                }
            };

            app.UseCors(corsOptions); 
        }
    }
}

И вызвать его:

public partial class Startup
{ 
    public void Configuration(IAppBuilder app)
    {       
        //..
        ConfigureCors(app);
        //..
    }
}

Надеюсь, это поможет.

Ура и счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...