2013-05-14 18 views
1

我對.ashx和Http處理程序完全陌生。但是,我想要做的就是調用我的控制器中的.ashx文件中定義的方法。如何調用在我的控制器(ASP.NET MVC)中的Http Handler文件(.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不熟悉,並且不確定實施它們的適當方式。

  1. 是以上甚至推薦,如果是的話,我該怎麼做到這一點?
  2. 如果不推薦以上內容,我可以用 這個替代方法來完成這個嗎?

回答

3

您應該從另一個輔助類中的proxy類中提取邏輯。該提取的方法不應該直接引用HttpContext,而只是所需的數據,例如byte[] imageData。從你的代碼中的兩個地方調用這個方法(假設你需要保持處理器的兼容性)。

0

這裏有方法調用傳遞當前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); 
相關問題