1

我对 .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. 如果不推荐上述方法,我可以通过什么替代方法来完成此操作?
4

2 回答 2

3

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

于 2013-05-14T15:03:50.623 回答
0

这里有两种方法可以调用将 Controller 中的当前 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);
于 2017-10-30T06:21:08.610 回答