0

Kann den Parameternamen "action" nicht per URL in asp.net web api 2.0 senden.Wie man den Parameternamen "action" in asp.net übergibt web api

Beispiel:

http://host:port/controller_name?action=2& ...

wenn Sie dies tun:

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}/{action}", 
       defaults: new 
       { 
        action=RouteParameter.Optional 
       } 
      ); 

Methode in der Steuerung:

public HttpResponseMessage Get(int action) 
    { 
     return ResponseXml(); 
    } 

eine Fehlermeldung gibt:

in the dictionary path name of the parameter "action" is contained in the URL-address more than once

Wie übergeben Sie den Parameternamen "action" als Parameter und nicht als Aktionsmethode?

dank

+0

Wenn Sie Ihren Aktionsparam durch querystring (? Action = ..) möchten, dann müssen Sie nicht in der Routenkarte festlegen. In Ihrem aktuellen routeTemplate sollte Ihre URL wie/controllername/actionname/xyz sein, aber wenn das erforderlich ist, warum können Sie Ihre routeTemplate nicht anders als Aktion ändern? –

+0

@Karthik MRI müssen Daten strikt nach dem Protokoll, welches Format zu erhalten: ** http: // Host: Port/Controller-Name? Aktion = 2 & Login = **, ersten Parameter sollte Parametername "Aktion" –

Antwort

2

Da der Name Aktion wird im Abfragezeichenfolgeflag Teil enthalten (? Action = 2), keine Notwendigkeit, die Routenkarte zu ändern. Das Framework bindet den Wert an den Aktionsparameter in der Aktionsmethode. Entfernen Sie die zusätzliche {Aktion} in RouteTemplate. Und da Ihr URL-Format nicht {action} host: port/controllername enthält? Action = 2 & login =, entfernen Sie {action} von routemap. So wird Ihre Routenkarte

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{id}", 
      defaults: new 
      { 
       id=RouteParameter.Optional 
      } 
     ); 
+0

wenn Sie dies tun, Fehler erhalten: _Auf den Werten des Controllers wurde keine Aktion gefunden, die dem Namen '2'_ entspricht. Ursache ist ein bindender Parameterwert für den Methodencontroller –

+0

remove api von routeTemplate. habe meine Antwort aktualisiert –

+0

ist klar. Vielen Dank. Ich dachte, dass alle Parameter in der Route genau angegeben werden sollten. –

0

Sie versuchen könnte Attribute Routing und es in der Route Vorlage.

//GET [controller_route]/2 
[HttpGet] 
[Route("{action:int}")] 
public HttpResponseMessage Get(int action) 
{ 
    return ResponseXml(); 
} 

, die Sie lassen verwenden Sie die folgende URL

http://host:port/controller_name/2 

wo action Parameter 2 abgebildet wird.

Denken Sie daran, das Attribut Routing während der Konfiguration zu aktivieren.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
}