Как я могу вызвать метод, определенный в файле обработчика Http (.ashx) в моем контроллере (ASP.NET MVC)?

Я совершенно новичок в обработчиках .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(...);
...

Я знаю, что вы можете вызвать ashx, перейдя по URL-адресу (http://server/proxy.ashx?ProcessRequest), но я не думаю, что это то, что мне нужно. Я хочу вызвать метод ashx из своего контроллера. Простите меня, если это не рекомендуемый подход - как я уже сказал, я новичок в ashx и не уверен в правильном способе их реализации.

  1. Рекомендуется ли вышеизложенное, и если да, то как я могу это сделать?
  2. Если вышеизложенное не рекомендуется, каким альтернативным способом я могу это сделать?

person Mike Marks    schedule 14.05.2013    source источник


Ответы (2)


Вы должны извлечь логику из вашего класса proxy в другой вспомогательный класс. Этот извлеченный метод не должен иметь прямой ссылки на HttpContext, а только необходимые данные, например, byte[] imageData. Вызовите этот метод из обоих мест вашего кода (при условии, что вам нужно сохранить обработчик для совместимости).

person Knaģis    schedule 14.05.2013

Вот два способа передать текущий 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);
person Angelina    schedule 30.10.2017