Идентифицировать вызовы angular js AJAX в коде ASP.NET MVC

Я работаю над примером приложения, используя ASP.NET MVC и AngularJS.

В коде на стороне сервера я написал атрибут фильтра действий, и в этом мне нужно проверить, является ли запрос обычным запросом (Browser) или AJAX.

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if ( filterContext.HttpContext.Request.IsAjaxRequest())
     {

     }
}

Метод, упомянутый в приведенном выше фрагменте кода "IsAjaxRequest()", не возвращает TRUE в случае запроса AJAX, выполненного с использованием службы $http Angular.

Я заметил, что в запросе нет заголовка X-Requested-With, и даже добавление заголовка не решило запрос.

Примечание. Это не вызов CORS.

Итак, мой вопрос.

  • Как filterContext.HttpContext.Request.IsAjaxRequest() определяет, является ли запрос AJAX или нет?

  • Я могу проверить заголовок запроса (имеет ли он определенный заголовок или нет) и решить, является ли запрос AJAX или нет. Это правильный и единственный подход?

Ответ 1

Он определяет, существует ли заголовок X-Requested-With или нет. Вы можете добавить заголовок X-Request-With вручную в службу $http.

Индивидуальный запрос

$http.get('/controller/action', {
   headers: {
    'X-Requested-With': 'XMLHttpRequest'
   }
});

Для каждого запроса

app.config(['$httpProvider', function ($httpProvider) {
  $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);

Вы можете понять, почему он отсутствует в Angular