我如何调用在我的控制器(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的新手,不确定实现它们的合适方法。
- 以上是推荐的吗?如果是,我该如何做到这一点?
- 如果上面的方法不被推荐,我可以用什么替代方法做到这一点的?
您应该从另一个助手类的proxy
类中提取逻辑。该提取方法不应直接引用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);