Нет пользовательских / авторизационных заголовков в контроллере MVC 5 - PullRequest
0 голосов
/ 02 ноября 2018

У меня MVC 5 ViewController, который не принимает заголовки от вызова Ajax. Источник вызова ajax - это другой веб-сайт, а не контроллер.

Вызов Ajax выглядит так:

window.jQuery.ajax({
       url: 'http://localhost:54155/TestView',
       headers: {'Authorization': 'token'},
       cache: false,
       contentType: 'application/json; charset=utf-8',
       method: 'Get',     
       dataType: 'json',
       data: {}
    }).success(alert('succes?'))
        .error(alert('failed'))
    });

Cors включен на стороне контроллера:

<httpProtocol>
      <customHeaders>        
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="*"/>
        <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />       
      </customHeaders>
    </httpProtocol>

И я пытаюсь добраться до этого контроллера:

public class TestViewController : Controller
    {           
        public ActionResult Index()
        {
           var keys = Request.Headers.AllKeys;
           return View();
        }
    }

Если я отправлю запрос в WebApi на основе контроллера WEP API 2, заголовки в порядке. Если я отправлю запрос с почтальоном на контроллер mvc, то с заголовками тоже все в порядке.

Заголовки содержат заголовок Access-Control-Request-Headers, который имеет значение авторизации. Но Request.Headers ["Authorization"] является нулевым.

Пользовательские заголовки, такие как X-MyHeader, отображаются как значения из Access-Control-Request-Headers, но при использовании в качестве ключа все они равны нулю.

Какую часть мне не хватает?

1 Ответ

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

У меня была такая же проблема - но это может решить вашу проблему

  1. Установить Microsoft.AspNet.WebApi.Cors из NuGet - запустить эту команду (Install-Package Microsoft.AspNet.WebApi.Cors) в вашей упаковке консоль менеджера - это установит ваши Cors

  2. Удалите ваш код разрешения доступа из вашего файла Web.config

  3. Если это Web Api, добавьте ниже код в вашем WebApiConfig.cs, если не пытаетесь добавить в Gloabl.asax

var cors = new EnableCorsAttribute("*", "*", "*", "*"); config.EnableCors(cors);

Вам будет интересно, откуда этот метод EnableCors() придет using System.Web.Http.Cors; добавьте эту строку в ваше использование и увидите магию

Это может решить вашу проблему. Наконец, не очень хорошая идея получить доступ к контроллеру MVC из другого домена, попробуйте использовать WebApi

Если вы хотите получить доступ к контроллеру MVC, попробуйте ввести код ajax в том же домене. Потому что WebApi не имеет состояния, а MVC - своего рода сессия - Спасибо, счастливого кодирования !!

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