Возможно ли иметь оба действия асинхронного контроллера GET и POST с одним и тем же именем? - PullRequest
1 голос
/ 05 января 2012

Возможно ли иметь AsyncController, который имеет действие GET и POST с одинаковым именем?

public class HomeController : AsyncController
{
    [HttpGet]
    public void IndexAsync()
    {
        // ...
    }

    [HttpGet]
    public ActionResult IndexCompleted()
    {
        return View();
    }

    [HttpPost]
    public void IndexAsync(int id)
    {
       // ...
    }

    [HttpPost]
    public ActionResult IndexCompleted(int id)
    {
        return View();
    }
}

Когда я попытался это, я получил ошибку:

Lookup for method 'IndexCompleted' on controller type 'HomeController' failed because of an ambiguity between the following methods:<br> System.Web.Mvc.ActionResult IndexCompleted() on type Web.Controllers.HomeController System.Web.Mvc.ActionResult IndexCompleted(System.Int32) on type Web.Controllers.HomeController

Возможно ли, чтобы они сосуществовали каким-либо образом или каждый метод асинхронного действия должен быть уникальным?

1 Ответ

0 голосов
/ 05 января 2012

Можно использовать несколько методов IndexAsync, но только один метод IndexCompleted, например:

public class HomeController : AsyncController
{
  [HttpGet]
  public void IndexAsync()
  {
    AsyncManager.OutstandingOperations.Increment(1);
    // ...
      AsyncManager.Parameters["id"] = null;
      AsyncManager.OutstandingOperations.Decrement();
    // ...
  }

  [HttpPost]
  public void IndexAsync(int id)
  {
    AsyncManager.OutstandingOperations.Increment(1);
   // ...
      AsyncManager.Parameters["id"] = id;
      AsyncManager.OutstandingOperations.Decrement();
    // ...
  }

  public ActionResult IndexCompleted(int? id)
  {
    return View();
  }
}

(MVC использует только атрибуты методов MethodNameAsync, поэтомутребуется для MethodNameCompleted методов)

...