2016-06-09 8 views
1

Ich habe meinen Get() Endpunkt geändert eine anderen Parameter zu nehmen, und es funktioniert nicht mehrWie kann ich meine Routenkonfiguration korrigieren, um einen zweiten Parameter zu akzeptieren?

public async Task<AjaxResponse> Get(long id, string appType) 
{ 

} 

Dies ist die Route Config, die ich für den neuen Parameter hinzugefügt habe (wenn ich das nicht hinzufügen gibt die Anfrage eine 404 zurück):

routes.MapHttpRoute( 
    name: "GetUser", 
    routeTemplate: "api/{controller}/{userId}/{appType}" 
    ); 

Jetzt Anfragen für diesen Endpunkt, z

/api/AccountApi/343434338361295/customer 

Ende an dem Standard-Framework-up erzeugt Get() Endpunkt:

public IEnumerable<string> Get() 
{ 
    return new string[] { "value1", "value2" }; 
} 

Was mit meiner Routing-Konfiguration falsch ist, und was kann ich tun, um es zu beheben?

Als Referenz meine gesamte Strecke Konfiguration ist wie folgt:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    //ASP.NET Web API Route Config 
    routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
     ); 

    routes.MapHttpRoute(
     name: "CreateOrLogin", 
     routeTemplate: "api/{controller}/CreateOrLogin/{appType}/{userId}" 
     ); 

    routes.MapHttpRoute(
     name: "GetUser", 
     routeTemplate: "api/{controller}/{userId}/{appType}" 
     ); 

    routes.MapHttpRoute(
     name: "GetAdsForRetailer", 
     routeTemplate: "api/{controller}/GetAdsForRetailer/{userId}/{page}/{pageSize}" 
     ); 

    routes.MapHttpRoute(
     name: "GetLatestAds", 
     routeTemplate: "api/{controller}/GetLatestAds/{userId}/{maxId}"// 
     ); 

    routes.MapHttpRoute(
     name: "GetAd", 
     routeTemplate: "api/{controller}/GetAd/{userId}/{id}"// 
     ); 

    routes.MapHttpRoute(
     name: "RegisterUser", 
     routeTemplate: "api/{controller}/RegisterUser/"// 
     ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Antwort

2

ich nicht dieses Recht jetzt testen können, aber ich denke, dass die Namen, die Sie in der Route definieren müssen die in der Get-Methode entsprechen, dh anstelle von

routeTemplate: "api/{controller}/{userId}/{appType}" 

sollten Sie

routeTemplate: "api/{controller}/{id}/{appType}" 

Die Route sollte regardl haben passen Sie werden dann versuchen, die Reflexion zu verwenden, um die Aufrufmethode zu bestimmen, und für diesen Parameter sind die Namen relevant.

+1

agh! Das war einer dieser Versuche, Fehler schnell zu beheben, die ich nie gehabt hätte. Vielen Dank :-) – DaveDev

0

Es gibt zwei Fehler im Code:

Erstens Der Name Ihres ersten Parameter ist nicht korrekt. Verwenden Sie entweder userId oder aktualisieren Sie Ihre Route Config wie @ Paolo-Tedesco sagte.

Abgesehen davon sollten die Parametertypen in Aktionen immer sein, die nullfrei sein können. Sie liefern long für userId. Der Rest deines Codes ist perfekt. Versuchen Sie einfach, long? in der Aktion zu verwenden.

public async Task<AjaxResponse> Get(long? userId, string appType) 
{ 

} 
Verwandte Themen