Nano Hash - криптовалюты, майнинг, программирование

Как определить, вызывалась ли страница aspx из Server.Execute?

У меня есть следующая примерная структура страницы:

  • Веб-страница.aspx
  • Скрипт.aspx

Если я вызываю Server.Execute("Script.aspx") из Webpage.aspx, как определить в Script.aspx, что он был вызван из Webpage.aspx, а не непосредственно из веб-браузера?

Я пытался проверить Referrer, но мне кажется, что возвращается только домен, а не скрипт.

Я использую веб-формы ASP.NET в .NET 3.5

25.02.2009

Ответы:


1

В Script.aspx.cs вы можете просто сравнить Request.Path с текущим путем выполнения.

if ( Request.CurrentExecutionFilePath == Request.Path ) 
{
   //This has been called from a web browser
} else {
   //This has been executed from the file Request.Path
}

Почему?

Части запроса передаются нетронутыми при вызове Server.Execute. Таким образом, если вы посмотрите на значение Request.Path из вашего Script.aspx.cs после использования Server.Execute в вашем Webpage.aspx.cs, вы увидите, что оно имеет значение "/Webpage.aspx".

Однако если веб-браузер будет напрямую обращаться к Script.aspx, значение Request.Path из Script.aspx.cs приведет к «/Script.aspx». currentExecutionPath всегда будет возвращать исполняемый в данный момент скрипт, поэтому их сравнение даст желаемый результат.

Надеюсь это поможет.

03.03.2009
  • Спасибо. Это был лучший предложенный метод, потому что мне не нужно было выполнять какую-либо дополнительную работу за пределами script.aspx :) 09.03.2009

  • 2

    Поскольку Server.Execute запускает новую страницу с тем же контекстом, что и исходная страница, все свойства Request должны по-прежнему отражать исходный запрос к Webpage.aspx (за исключением CurrentExecutionFilePath, который, как мы надеемся, содержит "/Script.aspx"). Request.Path должен содержать «/Webpage.aspx», а Request.Url предоставит полный объект Uri, если вам нужно увидеть домен или строку запроса.

    Вы также можете добавить значения в Context.Items перед вызовом Server.Execute и прочитать их в Script.aspx.

    25.02.2009

    3

    По крайней мере, вы можете сказать, является ли запрос локальным через Request.IsLocal .

    25.02.2009
  • Это возвращает true только в том случае, если запрос браузера был с локального сервера. В моем случае он всегда возвращает false. 25.02.2009
  • в этом случае я действительно не думаю, что есть какие-либо ссылки на исходную страницу. Лучше всего, вероятно, как говорили другие, передать эту информацию в строке запроса 26.02.2009

  • 4

    Вы можете передать параметр строки запроса в Script.aspx (что поможет вам определить, что он был вызван из WebPage.aspx).

    Server.Execute("script.aspx?xFrom=webPage.aspx")

    РЕДАКТИРОВАТЬ: я думаю, что запрос должен иметь какое-то значение, чтобы вы знали, что он работает с webpage.aspx.

    РЕДАКТИРОВАТЬ2: Запрос.URL?

    25.02.2009

    5

    HttpRequest.FilePath вернет URL-адрес запрошенной страницы, которую затем можно будет сопоставить с подстрокой для "Script.aspx".

    (Однако примите этот ответ с большой долей скептицизма, мой .Net довольно плохой.)

    03.03.2009
  • Это возвращает Script.aspx, но я хочу, чтобы он возвращал Webpage.aspx. Спасибо за ответ. 04.03.2009
  • Подождите... Вместо этого попробуйте переменную CGI 'SCRIPT_NAME'. У меня нет ASP-бокса, чтобы проверить это прямо сейчас, но, надеюсь, он должен работать так же, как и в PHP (что в данном случае работает правильно). 04.03.2009

  • 6

    Предполагая, что у вас нет забавного IHttpHandler, вы можете проверить, HttpContext.PreviousHandler не равен нулю. Однако, поскольку существует миллион (ну, несколько) причин, по которым может быть установлен PreviousHandler, я бы согласился с рекомендацией stevemegson использовать HttpContext.Items перед вызовом Server.Execute.

    08.03.2009
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..