我是.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的新手,并不确定实施它们的适当方法。
答案 0 :(得分:3)
您应该从另一个帮助类中的proxy
类中提取逻辑。提取的方法不应直接引用HttpContext
,而只需引用所需数据,例如byte[] imageData
。从代码中的两个位置调用此方法(假设您需要保持处理程序的兼容性)。
答案 1 :(得分:0)
以下是两种方法来调用传递当前的httpcontext,它在Controller中为.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);