2012-03-26 13 views
1

Hallo ich habe einen API-Controller, die mehr POST erforderlich Karte/Route schreiben:Wie für mehrere Beitrag

einen für Save/Update:

public Order PostOrder(Order order) 
{ 

} 

Und ein andere für Suchauftrag

public IQueryable<Order> SearchWithParameter(SearchOrderParameter searchParameter) 
{ 

} 

ich habe unten Strecke Methode in Global.asax

hinzugefügt
routes.MapHttpRoute(
      name: "SearchWithParameter", 
      routeTemplate: "api/{controller}/{action}/{searchParameter}", 
      defaults: new { action = "post" } 
     ); 

In Js Ich rufe es als:

var SearchOrderParameter = new Object(); 
SearchOrderParameter.OrderID = 1197; 
$.ajax({ 
    url: "http://localhost:9003/api/orders/SearchWithParameter", 
    data: SearchOrderParameter, 
    type: "Post", 
    dataType: "json", 
    success: function (value) { 
     alert(value); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     alert(textStatus); 
    } 
}); 

Aber jedes Mal, diese Methode PostOrder aufruft. Bitte führen Sie mich, was ich vermisse, so dass es SearchWithParameter anrufen wird.

Antwort

1

Standardmäßig werden HTTP-Operationen einer C# -Funktion zugeordnet, beginnend mit dem HTTP-Methodennamen. Ein HTTP-POST wird also einer Post ....() -Methode und niemals einer Search ....() -Methode zugeordnet. Sie können ein HttpPost-Attribut hinzufügen, damit die SearchWithParameter() -Methode auch mit dem Post funktioniert.

+0

Dank Maurice, Könnten Sie bitte einige Beispiel-Code zur Verfügung stellen. –

3

versuchen, diese Routen mit ...

routes.MapHttpRoute(
      name: "ApiAction", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { action = @"^[A-Za-z]" } 
     ); 

     routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
Verwandte Themen