wirklich Probleme haben, um sich mit MVC Routing bekommen trotz Belastungen von Blogs und Tutorials auf sie zu lesen ...MVC Routing-Probleme
ich diese WebAPI Funktion haben:
public HttpResponseMessage UpsertProducts([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergProduct> heisenbergProducts)
und die Standardroute in Route.config
:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Alles funktioniert gut.
Ich habe nun eine weitere Funktion hinzugefügt:
public HttpResponseMessage ReviseInventory([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergReviseInventory> heisenbergReviseInventories)
Trotz der Aktionsnamen anders zu sein, scheint es einen Konflikt zu sein, und wenn einer von ihnen ruft erhalte ich eine 500 internal server error
- ich denke, es ist nicht kennt welches zu verwenden.
ich sie bin Aufruf URL:
api/webapiproducts/upsertproducts?marketplaceId={0}&datasourceId={1}
Ich habe versucht, mithilfe von Attribut, um das Problem zu bekommen Routing:
[Route("/api/WebApiProducts/upsertproducts/{marketplaceid}/{datasourceid}")]
public HttpResponseMessage UpsertProducts([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergProduct> heisenbergProducts)
und
[Route("/api/WebApiProducts/reviseinventory/{marketplaceid}/{datasourceid}")]
public HttpResponseMessage ReviseInventory([FromUri] int marketplaceId, [FromUri] int datasourceId, [FromBody]List<HeisenbergReviseInventory> heisenbergReviseInventories)
Keines meiner Routing Attribute scheinen zu funktionieren. Was mache ich falsch und was verstehe ich hier nicht?
Wie @Nkosi wies darauf hin, ich würde die falsche Route Datei! Hier ist mein WebApiConfig.cs Inhalt:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Sie haben recht - ich die falsche Konfigurationsdatei contect hinzugefügt - ich habe die Frage aktualisiert haben die richtigen Daten. Immer noch Probleme mit meinen Abfrage-String-Parametern. Ich habe es geschafft, indem ich die URL, die ich anrufe, geändert habe - ich dachte, du könntest beides machen. Siehe meine Antwort – Rick
@Rick. Sie können in beide Richtungen arbeiten. Die Reihenfolge der Mapping-Routen ist wichtig, da die erste Route mit Gewinnen übereinstimmt, wobei spezifischere Routen zuerst gemappt werden und allgemeinere Routen später auf der Linie abgebildet werden.Sie müssen die Reihenfolge ändern, indem Sie die letzte Zuordnung um eins erhöhen. es erreicht die zweite konventionsbasierte Route nicht, da sie bereits mit der ersten übereinstimmt. – Nkosi
danke, ja du hast recht über die bestellung - ich habe es vergessen. Ich änderte die Reihenfolge und versuchte mit der Querystring-Methode aufzurufen, aber es funktionierte immer noch nicht. Ich muss immer noch die Methode anwenden, die ich in meine Antwort eingefügt habe. – Rick