Как определить, является ли запрос обратным вызовом в Global.asax? - PullRequest
4 голосов
/ 10 июля 2009

Мне нужно найти способ определить, является ли запрос обратным вызовом, когда вызывается метод Application_BeginRequest.

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)<br />
    Dim _isCallBack As Boolean = False

    ' Code to set _isCallBack is True or False Here

    If Not _isCallBack Then
        '... Some Code
    End If
End Sub

Мне нужно знать, что заменить "[Код для установки _isCallBack равен True или False Here]" на.

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Это может помочь вам: http://msdn.microsoft.com/en-us/magazine/cc163941.aspx
Поиск слова __CALLBACKID:

Чтобы определить режим обратного вызова, среда выполнения ASP.NET ищет запись __CALLBACKID в коллекции запросов. Если такая запись найдена, среда выполнения завершает выполнение обратного вызова.

Нам нужно было сделать это из файла app_code, где доступ к объектам Page.xxxx был недоступен. Это код, который я использовал в итоге:

If Not IsNothing(HttpContext.Current.Request("__CALLBACKID")) Then
    'The request is a callback
Else
    'The request is not a callback
End If

Возможно, не самое красивое решение, но оно делает свою работу. Некоторое время мы использовали Array.IndexOf, но иногда кажется, что этот параметр формы возвращается как строчный параметр (не уверен, почему и как), а Array.IndexOf - это поиск с учетом регистра.

Будьте внимательны при поиске таких ключей запроса __XXXX. Я помню, как читал где-то, что не очень хорошая идея "ярлык" для этих элементов, поскольку их имена могут измениться в какой-то будущей версии .net. Просто имейте это в виду!

2 голосов
/ 11 июня 2010

Мне нужно нечто подобное, и, следуя ответу Дина Л., решил, что .NET сама должна знать, что делать. Глядя в метод HttpResponse.Redirect с помощью Reflector, вы видите код, подобный этому:

Page handler = Context.Handler as Page;
if (handler != null && handler.IsCallback)
{
    //Code...
}

Кажется, что работает нормально в Global.asax.

1 голос
/ 11 июля 2009

Зависит от контекста вашего вопроса. Я вижу, вы говорите о ASP.NET в тегах, используя VB.NET. Вы, вероятно, можете использовать:

If Not Request.IsPostback Then
  ' Your code here
End If
...