如何在我的控制器(ASP.NET MVC)中调用Http Handler文件(.ashx)中定义的方法?

时间:2013-05-14 15:00:59

标签: c# asp.net-mvc httphandler ashx ihttphandler

我是.ashx和Http Handlers的新手。但是,我想要做的是从我的控制器中调用我的.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. 如果不推荐以上,我可以采用另一种方法     完成这个?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

以下是两种方法来调用传递当前的httpcontext,它在Controller中为.ashx:

  1. HttpContext context = HttpContext.ApplicationInstance.Context;

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

  3. 然后你可以称之为:

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