Как мне вызвать ASHX изнутри функции ASPX.VB?

Мне нужно получить значение из API, который я создал с помощью ASHX, и обычно он вызывается из javascript, но мне нужно вызывать его прямо в ASP.NET. Я решил, что это не должно быть проблемой, но я не уверен в синтаксисе.

Ответов (2)

Решение

Что ж, у вас есть пара вариантов

  1. Вы можете реорганизовать код в вашем ASHX, чтобы он находился в общей библиотеке, чтобы вы могли напрямую обращаться к методам, а также к обработчику.
  2. Вы можете создать экземпляр обработчика и вызвать участников, если они не являются частными.
  3. Вы можете создать веб-запрос обработчику и обработать ответ.

Это всего лишь несколько простых способов.

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

Отредактируйте, чтобы предоставить ответы на вопросы в комментариях.

По сути, да ... Вместо того, чтобы иметь кучу кода в вашем обработчике, вы создаете класс, который называется чем-то значимым для вас в контексте. Внутри этого класса вы помещаете логику, которая была в вашем обработчике. Затем из своего обработчика вы можете создать экземпляр или вызвать статическую версию класса (в зависимости от того, как вы ее реализовали), передав ему объект HttpContext или что-то еще, что требуется для правильной работы этой логики. Сделайте то же самое на своей странице ASPX. Теперь вы можете вызывать объект, содержащий логику, из любого места вашего приложения, вместо того, чтобы хранить его только в обработчике.

БЫВШИЙ:

Public Class MyCommonLogic
    Public Shared Function ReturnSomethingCommon(context As HttpContext) As String
        Return "Hello World!"
    End Function
End Class

Затем из обработчика или страницы aspx ..

Dim something As String = MyCommonLogic.ReturnSomethingCommon(...)

Я сделал функцию статической, но это всего лишь пример, я бы ее реализовал, но в вашем сценарии будет больше смысла.

Изменил код на VB, сожалею об этом.

Если ASHX находится на одном сервере, особенно если он находится в одном веб-приложении, вам следует реорганизовать свою логику из ashx в общий класс, который могут вызывать как aspx, так и ashx.

В противном случае вы можете посмотреть, используя: System.Net.WebClient