Идентифицировать вызовы 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