Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用';是在我的控制器(ASP.NET MVC)的Http处理程序文件(.ashx)中定义的吗?_C#_Asp.net Mvc_Httphandler_Ashx_Ihttphandler - Fatal编程技术网

C# 如何调用';是在我的控制器(ASP.NET MVC)的Http处理程序文件(.ashx)中定义的吗?

C# 如何调用';是在我的控制器(ASP.NET MVC)的Http处理程序文件(.ashx)中定义的吗?,c#,asp.net-mvc,httphandler,ashx,ihttphandler,C#,Asp.net Mvc,Httphandler,Ashx,Ihttphandler,我完全不熟悉.ashx和Http处理程序。但是,我要做的是从控制器中调用.ashx文件中定义的方法 例如,我的.ashx定义如下: public class proxy : IHttpHandler { public void ProcessRequest (HttpContext context) { HttpResponse response = context.Response; ... 现在,在我的控制器中,我想执行如下操作: [HttpPost] publ

我完全不熟悉.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是新手,不确定实现它们的适当方式

  • 是否建议采用上述方法?如果是,我如何才能做到这一点
  • 如果不建议使用上述方法,我可以采用什么替代方法 做到这一点

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

    这里有两种方法可以将控制器中的当前httpcontext调用为.ashx:

  • HttpContext-context=HttpContext.ApplicationInstance.context

  • HttpContext context=(HttpContext)HttpContext.GetService(typeof(HttpContext))

  • 那么你可以称之为:

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