Приложение MVC Web API Angular ('http://localhost:4200' заблокировано политикой CORS) - PullRequest
1 голос
/ 06 июля 2019

Я часами искал способ разрешить моему веб-приложению (Angular) доступ к моему Asp.NET MVC (Controller), но он отображает следующую ошибку:

Доступ к XMLHttpRequest по адресу https://localhost:44344/Authentication/SignIn' от происхождения 'http://localhost:4200' заблокирован политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: не имеет HTTP ok статус.

Угловой URL: http://localhost:4200/login?returnUrl=%2F

MVC URL: https://localhost:44344/

Вот также то, что я добавил в свой web.config

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Methods" value="*" />
    <add name="Content-Type" value="application/json"/>

    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

Я также добавил следующую строку в главный контроллер:

 [EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]

Но ошибка та же.

Вот инициация контролов:

    [HttpPost]
    [AllowAnonymous]
    [DisableCors]
    public JsonResult SignUp(HF_Accnt_Access Company)

Может кто-нибудь помочь мне, пожалуйста.

1 Ответ

0 голосов
/ 08 июля 2019

Подстановочный знак для Access-Control-Allow-Methods еще не поддерживается всеми браузерами.

Поддержка браузера также отслеживается MDN здесь

, поэтому измените эту строку

[EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]

TO

 [EnableCors(origins: "*", headers: "*", methods: "GET, POST, PUT, DELETE, OPTIONS")]

И вам придется обрабатывать метод «ОПЦИИ» отдельно в global.asax , так как браузер отправит предварительный запрос на сервер

 protected void Application_BeginRequest()
    {
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }
...