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

  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • steeletraining

    steeletraini

    28 NİSAN 2010