簡體   English   中英

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

[英]How can I call a method that's defined in an Http Handler file (.ashx) in my controller (ASP.NET MVC)?

我是.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. 如果不推薦上述內容,我可以采用另一種方法來實現這一目標嗎?

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

以下兩種方法可以將Controller中的當前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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM