Asp.net 如何从ASPX.VB函数内部调用ASHX?

Asp.net 如何从ASPX.VB函数内部调用ASHX?,asp.net,vb.net,ashx,Asp.net,Vb.net,Ashx,我需要从我用ASHX制作的API中获取一个值,通常它是从javascript调用的,但我需要在ASP.NET中调用它。我想这应该不会有问题,但我不确定语法。好吧,您有几个选项 您可以将ASHX中的代码重构到共享库中,这样您就可以直接访问方法,也可以访问处理程序 如果成员不是私有的,您可以实例化处理程序并调用它们 您可以向处理程序创建webrequest并处理响应 这些只是一些简单的方法 我个人喜欢第一种方法,因为它促进了代码重用,但根据场景的不同,您可以随心所欲 编辑以提供评论中问题的答案 基本

我需要从我用ASHX制作的API中获取一个值,通常它是从javascript调用的,但我需要在ASP.NET中调用它。我想这应该不会有问题,但我不确定语法。

好吧,您有几个选项

  • 您可以将ASHX中的代码重构到共享库中,这样您就可以直接访问方法,也可以访问处理程序
  • 如果成员不是私有的,您可以实例化处理程序并调用它们
  • 您可以向处理程序创建webrequest并处理响应
  • 这些只是一些简单的方法

    我个人喜欢第一种方法,因为它促进了代码重用,但根据场景的不同,您可以随心所欲

    编辑以提供评论中问题的答案

    基本上是的。。。您不需要在处理程序中包含一堆代码,而是创建一个类,称为对您上下文有意义的类。在该类中,您放置处理程序中的逻辑。然后,您可以从处理程序创建一个实例或调用该类的静态版本(取决于实现它的方式),将HttpContext对象或该逻辑正确运行所需的任何内容传递给它。在您的ASPX页面中执行相同的操作。现在,您可以从应用程序中的任何位置调用包含逻辑的对象,而不是让它单独驻留在处理程序中

    例:

    然后从处理程序或aspx页面

    Dim something As String = MyCommonLogic.ReturnSomethingCommon(...)
    
    我将函数设置为静态,但这只是一个示例。当然,我将实现它,但在您的场景中,这将更有意义


    将代码更改为VB对此表示抱歉。

    您有两个选择

  • 您可以将ASHX中的代码重构到共享库中,这样您就可以直接访问方法,也可以访问处理程序
  • 如果成员不是私有的,您可以实例化处理程序并调用它们
  • 您可以向处理程序创建webrequest并处理响应
  • 这些只是一些简单的方法

    我个人喜欢第一种方法,因为它促进了代码重用,但根据场景的不同,您可以随心所欲

    编辑以提供评论中问题的答案

    基本上是的。。。您不需要在处理程序中包含一堆代码,而是创建一个类,称为对您上下文有意义的类。在该类中,您放置处理程序中的逻辑。然后,您可以从处理程序创建一个实例或调用该类的静态版本(取决于实现它的方式),将HttpContext对象或该逻辑正确运行所需的任何内容传递给它。在您的ASPX页面中执行相同的操作。现在,您可以从应用程序中的任何位置调用包含逻辑的对象,而不是让它单独驻留在处理程序中

    例:

    然后从处理程序或aspx页面

    Dim something As String = MyCommonLogic.ReturnSomethingCommon(...)
    
    我将函数设置为静态,但这只是一个示例。当然,我将实现它,但在您的场景中,这将更有意义


    将代码更改为VB对此表示抱歉。

    如果ASHX在同一台服务器上,特别是在同一个web应用程序中,您应该将ASHX中的逻辑重构为aspx和ASHX都可以调用的公共类


    否则,如果ASHX在同一台服务器上,特别是在同一个web应用程序中,您可以使用:System.Net.WebClient查看,您应该将ASHX中的逻辑重构为一个aspx和ASHX都可以调用的公共类


    否则,您可以使用:System.Net.WebClient

    我喜欢想法1,但我不确定这是什么意思,我创建了一个包含所有代码的新类,然后在ashx中,我没有代码,而是创建了一个我创建的类的新实例,并将值传递给该对象的函数,对吗?我喜欢想法1,但我不确定这意味着什么,我创建一个包含所有代码的新类,然后在ashx中,我只创建一个我创建的类的新实例,并将值传递给该对象的函数,对吗?