Я попробовал Request.IsAjaxRequest
, но этого не существует в WebForms. Я делаю вызов JQuery ajax. Как проверить, является ли этот запрос ajax или нет в С#?
Как проверить, является ли запрос ajax или нет в codebehind - ASP.NET Webforms
Ответ 1
Вы можете создать свой собственный метод расширения, подобный тому, который находится в MVC code
например.
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
}
HTHS,
Чарльз
Изменить: Фактически запросы обратного вызова также являются запросами ajax,
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
var context = HttpContext.Current;
var isCallbackRequest = false;// callback requests are ajax requests
if (context != null && context.CurrentHandler != null && context.CurrentHandler is System.Web.UI.Page)
{
isCallbackRequest = ((System.Web.UI.Page)context.CurrentHandler).IsCallback;
}
return isCallbackRequest || (request["X-Requested-With"] == "XMLHttpRequest") || (request.Headers["X-Requested-With"] == "XMLHttpRequest");
}
Ответ 2
Попробуйте проверить, есть ли ScriptManager IsInAsyncPostBack:
ScriptManager.GetCurrent(Page).IsInAsyncPostBack
Ответ 3
Как правило, вам нужно протестировать заголовок X-Requested-With
, гарантируя, что его значение равно "XMLHttpRequest". Я не разработчик С# (пока), но быстрый поиск в Google говорит, что в С# он выглядит примерно так:
Request.Headers["X-Requested-With"] == "XMLHttpRequest";
Ответ 4
Да, Request.IsAjaxRequest
просматривает заголовки и запрос для X-Requested-With
, но кажется, что ваш jquery не отправляет заголовок X-Requested-With
.
Вы можете попробовать и посмотреть, какие заголовки он отправляет с помощью Fiddler, или же просто отправить его в querystring, установив URL POST в
/whatever.aspx?x-requested-with=XMLHttpRequest
Ответ 5
Украсьте свой класс синтаксисом [WebMethod(EnableSession = true)]
, например, если вы напишете следующую функцию в коде позади и вызовите ту же функцию из ajax-вызова, вы будете уверены.
[WebMethod(EnableSession = true)]
public static void getData(string JSONFirstData,string JSONSecondData, string JSONThirdData, string JSONForthData, ...)
{
//code
}
в URL-адресе Ajax будет выглядеть как URL :'/Codebehind.aspx/getData'
Ответ 6
Я создал расширение, которое я использую:
internal static bool IsAjaxRequest(this HttpRequestMessage request)
{
return request != null && request.Headers.Any(h => h.Key.Equals("X-Requested-With", StringComparison.CurrentCultureIgnoreCase) &&
h.Value.Any(v => v.Equals("XMLHttpRequest", StringComparison.CurrentCultureIgnoreCase)));
}