12

ASP.NET MVC4 Web API v1-Controller ist unten definiert. Es sollte 1 oder 2 Parameter der Abfragezeichenfolge akzeptieren.Erzwingen der Web-API zum Erkennen des Querystring-Parameters

Ko-Parameter ist jedoch immer null, wenn die Methode aufgerufen wird. Anfrage ist unten. Wie zu beheben, damit Klient oder Namepart-Parameter in Abfragezeichenfolge übergeben werden können?

Web API v1 Controller:

namespace MyApp.Controllers 
{ 
    public class CustomersSearchViewModel 
    { 
     public string Klient { get; set; } 
     public string Namepart { get; set; } 
    } 


    [Authorize] 
    public class CustomersController : ApiController 
     { 

     public HttpResponseMessage Get(CustomersSearchViewModel ko) 
      { 
      // why ko is null ?   
      var res = GetCustomers(ko.Klient,ko.Namepart); 
      return Request.CreateResponse(HttpStatusCode.OK, 
        new { customers = res.ToArray() }); 
      } 

     } 
    } 

-Controller auf Wunsch aufgerufen wird (Appl von erp unseren virtuellen Verzeichnis ausgeführt wird):

GET /erp/api/customers?namepart=kaks&_=1385320904347 HTTP/1.1 
Host: localhost:52216 
Connection: keep-alive 
Accept: application/json, text/javascript, */*; q=0.01 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 
Referer: http://localhost:52216/erp/Sale 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: et-EE,et;q=0.8,en-US;q=0.6,en;q=0.4 
Cookie: .myAuth=8B6B3CFFF3DF64EBEF3D258240D217C56603AF255C869FBB7934560D9F560659342DC4D1EAE6AB28454122A86C3CE6C598FB594E8DC84A; My_Session=5aw2bsjp4i4a5vxtekz 

Standard-Routing verwendet wird:

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

Anwendung muss ausgeführt werden Win Windows 2003 Server auch so Web API v.2 kann nicht verwendet werden.

aktualisieren

ich auch

versucht
public HttpResponseMessage Get(string klient, string namepart) 

aber in diesem Fall 404 Fehler zurückgegeben wird, wird Aktion nicht gefunden.

+0

Haben Sie das Attribut '[FromUri]' auf dem Parameter versucht? –

Antwort

19

Komplexe Typen geholt werden aus dem Körper eines Ersuchens, aber Sie können dieses Standardverhalten wie folgt ändern:

public HttpResponseMessage Get([FromUri]CustomersSearchViewModel ko) 

Ihre Abfragezeichenfolgeflag sollte wie Ihr Modell-Eigenschaften genannt enthalten Parameter, wird die Bindung sonst nicht funktionieren .

1

Eine weitere Option ist die Implementierung eines benutzerdefinierten Typanbieters. Dies ermöglicht die Steuerung der Darstellung in der Abfragezeichenfolge und bedeutet, dass Sie das Attribut [FromUri] nicht zu Ihren Aktionsmethoden hinzufügen müssen. Dies ist sinnvoll, wenn Sie einen komplexen Parametertyp häufig wiederverwenden oder eine benutzerdefinierte Darstellung benötigen.

Ein gutes Beispiel hierfür ist in this blog post gegeben, wo eine Position mit Breiten- und Längengrad mit beiden Techniken implementiert wird.

Verwandte Themen