2017-03-14 13 views
0

ich die folgende Route definiert haben:ASP.Net WebAPI Routing-Konfiguration

GlobalConfiguration.Configuration.Routes.Add(
    "iOS Service", 
    new HttpRoute("ios/{controller}/{action}/{id}", new HttpRouteValueDictionary { { "id", RouteParameter.Optional } }) 
); 

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service Documents", 
    routeTemplate: "ios/getfulldocumentstructure", 
    defaults: new { controller = "Documents", action = "GetFullDocumentStructure" } 
); 

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service AppInfo", 
    routeTemplate: "ios/appinfo", 
    defaults: new { controller = "AppInfo", action = "GetAppInfo" } 
); 

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service Html", 
    routeTemplate: "ios/html/{language}/{contentId}", 
    defaults: new { controller = "Html", action = "GetHtml", language = RouteParameter.Optional, contentId = RouteParameter.Optional } 
); 

Mit dem folgenden Controller:

public class HtmlController : ApiController 
{ 
    [HttpGet] 
    public string GetHtml(long language, long contentId) 
    { 

     return "Hello"; 
    } 
} 

Wenn ich den Dienst treffen mit http://localhost/ios/html?languageId=1033&contentId=12345 die getHTML Aktion ausgelöst wird.

Wenn ich den Service unter Verwendung http://localhost/ios/html/1033/12345 treffe, erhalte ich einen Fehler, dass keine passende Aktion in der Steuerung gefunden wird.

Was mache ich falsch?

+2

Haben Sie irgendwelche anderen Routen definiert, die Konflikte verursachen könnten? Wo wurde diese Route in Relation zu anderen Routen definiert? – Nkosi

+0

Ich habe drei andere Routen definiert, aber die Fehlermeldung besagt, dass sie den richtigen Controller trifft. { "Nachricht": "Es wurde keine HTTP-Ressource gefunden, die mit der Anfrage-URI übereinstimmt" http: // localhost/ios/html/1033/2 ' . ", " MessageDetail ":" Es wurde keine Aktion auf dem Controller 'Html' gefunden, die mit dem Namen '1033' übereinstimmt. " } –

+1

Nur weil es den richtigen Controller trifft, heißt das nicht, dass es die richtige Route trifft. Bitte posten Sie Ihre anderen Routen und die Reihenfolge, in der sie registriert sind. – NightOwl888

Antwort

0

Verschieben der Fang alle dem Weg zum Ende das Problem behoben. Die Anrufe trafen den falschen Controller:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service Documents", 
    routeTemplate: "ios/getfulldocumentstructure", 
    defaults: new { controller = "Documents", action = "GetFullDocumentStructure" } 
); 

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service AppInfo", 
    routeTemplate: "ios/appinfo", 
    defaults: new { controller = "AppInfo", action = "GetAppInfo" } 
); 

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "iOS Service Html", 
    routeTemplate: "ios/html/{language}/{contentId}", 
    defaults: new { controller = "Html", action = "GetHtml", language = RouteParameter.Optional, contentId = RouteParameter.Optional } 
); 

GlobalConfiguration.Configuration.Routes.Add(
    "iOS Service", 
    new HttpRoute("ios/{controller}/{action}/{id}", new HttpRouteValueDictionary { { "id", RouteParameter.Optional } }) 
); 
0

Wenn Ihre Parameter sind optional, dann versuchen Sie vielleicht dies:

public class HtmlController : ApiController 
{ 
    [HttpGet] 
    public string GetHtml(long? languageId, long? contentId) 
    { 

     return "Hello"; 
    } 
}