SORU
10 Temmuz 2012, Salı


Web birden fazla HttpPost yöntemi denetleyicisi API

, HttpPost birden fazla yöntem ile kumanda var API MVC4 Web kullanmaya başladım. Kumanda aşağıdaki gibi görünür:

Denetleyicisi

public class VTRoutingController : ApiController
{
    [HttpPost]
    public MyResult Route(MyRequestTemplate routingRequestTemplate)
    {
        return null;
    }

    [HttpPost]
    public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
    {
        return null;
    }
}

Burada MyRequestTemplate şablon sınıf Json isteği geliyor yönetme sorumluluğunu temsil eder.

Hata:

İsteği http://localhost:52370/api/VTRouting/TSPRoute http://localhost:52370/api/VTRouting/Route Fiddler kullanarak yaptığım zaman hata alıyorum:

Birden fazla eylem talep eşleşen bulundu

Ben yöntemi üstünde de bir program gayet iyi çalışıyor.

Global.asax

global.asax, varsayılan yönlendirme tablosu değiştirmeyi denedim ama yine de hata, global yolları tanımlamada sorun var sanırım alıyorum.asax. Genel olarak ben ne yapıyorum burada.asax.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapHttpRoute(
            name: "MyTSPRoute",
            routeTemplate: "api/VTRouting/TSPRoute",
            defaults: new { }
      );

    routes.MapHttpRoute(
        name: "MyRoute",
        routeTemplate: "api/VTRouting/Route",
        defaults: new {action="Route" }
    );
}

Fiddler isteği SONRASI kullanarak, MyRequestTemplate için RequestBody içinde json geçen yapıyorum.

CEVAP
3 EKİM 2012, ÇARŞAMBA


Tek bir kontrol içinde birden fazla eylem olabilir.

Bunun için aşağıdaki iki şey yapmanız gerekir.

  • İlk ActionName ile süsleyin eylemler [ActionName("route")] gibi bağlıyor
public class VTRoutingController : ApiController
{
  [ActionName("route")]
  public MyResult PostRoute(MyRequestTemplate routingRequestTemplate)
  {
     return null;
  }

  [ActionName("tspRoute")]
  public MyResult PostTSPRoute(MyRequestTemplate routingRequestTemplate)
  {
     return null;
  }
}
  • İkinci WebApiConfig dosya içinde aşağıdaki yolları tanımlayın.
// Controller Only
// To handle routes like `/api/VTRouting`
config.Routes.MapHttpRoute(
    name: "ControllerOnly",
    routeTemplate: "api/{controller}"             
);

// Controller with ID
// To handle routes like `/api/VTRouting/1`
config.Routes.MapHttpRoute(
    name: "ControllerAndId",
    routeTemplate: "api/{controller}/{id}",
    defaults: null,
    constraints: new { id = @"^\d $" } // Only integers 
);

// Controllers with Actions
// To handle routes like `/api/VTRouting/route`
config.Routes.MapHttpRoute(
    name: "ControllerAndAction",
    routeTemplate: "api/{controller}/{action}"
);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LiveForGodsKingdom

    LiveForGodsK

    6 NİSAN 2008
  • Metheud

    Metheud

    9 EYLÜL 2006
  • RocketJump

    RocketJump

    22 ŞUBAT 2006