我如何调用在我的控制器(ASP. js)中的Http处理程序文件(.ashx)中定义的方法?净MVC)

本文关键字:ashx 文件 定义 程序 处理 方法 MVC 中的 调用 何调用 我的 | 更新日期: 2023-09-27 18:13:24

我对。ashx和Http处理程序完全陌生。但是,我想做的是调用。ashx文件中定义的方法从控制器中调用

例如,我的.ashx定义如下:

public class proxy : IHttpHandler {
    public void ProcessRequest (HttpContext context) {
        HttpResponse response = context.Response;
...

现在,在我的控制器中,我想这样做:

[HttpPost]
public int PostPicture(HttpRequestMessage msg)
{
    proxy.ProcessRequest(...);
...

我知道你可以通过导航到URL (http://server/proxy.ashx?ProcessRequest)来调用ashx,但我不认为这是我需要的。我想从控制器内部调用ashx方法。如果这不是一种推荐的方法,请原谅我——正如我所说的,我是ashx的新手,不确定实现它们的合适方法。

  1. 以上是推荐的吗?如果是,我该如何做到这一点?
  2. 如果上面的方法不被推荐,我可以用什么替代方法做到这一点的?

我如何调用在我的控制器(ASP. js)中的Http处理程序文件(.ashx)中定义的方法?净MVC)

您应该从另一个助手类的proxy类中提取逻辑。该提取方法不应直接引用HttpContext,而应仅引用所需的数据,例如byte[] imageData。从代码中的两个位置调用此方法(假设为了兼容性需要保留处理程序)。

这里有两种方法来调用传入当前httpcontext在控制器到。ashx:

  1. HttpContext context = HttpContext.ApplicationInstance.Context;

  2. HttpContext context = (HttpContext)HttpContext.GetService(typeof(HttpContext));

那么你可以叫它:

[HttpPost]
public int PostPicture(HttpRequestMessage msg)
{
    HttpContext context = HttpContext.ApplicationInstance.Context;
    proxy.ProcessRequest(context);