Ich habe diese Konfiguration in der HttpConfigurationWie Web api Route auf dem gleichen Verfahren mit Anmerkungen
config.Routes.MapHttpRoute("Default", "api/{controller}");
config.Routes.MapHttpRoute("Another", "api/{controller}/{action}");
config.Routes.MapHttpRoute("WithKey", "api/{controller}/{action}/{key}");
Aus diesem Grund außer Kraft zu setzen ich nicht mein Controller wie diese
http://<host>/api/products (works)
http://<host>/api/products/1 (doesn't work)
So hinzugefügt
zugreifen kann ich die Anmerkung Route in der Get-Methode, aber es funktioniert nicht[RoutePrefix("products")]
public class ProductsController : ApiController
{
[HttpGet]
public IQueryable<IProduct> GetProducts()
{
return db.GetProducts();
}
//[Route("products/{productID}")] Tried. Doesn't work
//[Route("{productID:int}")] Tried. Doesn't work
[HttpGet]
public IProduct GetProduct(int productID)
{
return db.GetProduct(productID);
}
}
Der einzige Weg, um es zu arbeiten ist die Adresse wie folgt eingeben http://<host>/api/products?productID=1
, aber ich möchte wirklich mit dieser URL http://<host>/api/products/1
zugreifen.
Ich kann neue Routen in der http-Konfiguration hinzufügen, aber die vorhandenen nicht ändern. Und ich möchte die vorhandenen Controller nicht beeinflussen.
Wie kann ich das bitte lösen?
Danke für Ihre Antwort. Ich habe MapHttpAttributRoutes() angewendet. Dann fügte ich die Anmerkungen hinzu. Ich kann nur GetProducts anfordern, aber ich kann immer noch nicht die API/products/1 bekommen. Nachricht, die ich erhalte: "{" Message ":" Es wurde keine HTTP-Ressource gefunden, die mit der Anfrage-URI übereinstimmt "http: // /api/products/1'.","MessageDetail":"Auf dem Controller wurde keine Aktion gefunden ' Produkte, die der Anfrage entsprechen. "}" –
@MaximusDecimus, Haben Sie es vor konventionsbasierten Routen hinzugefügt, wie in der Antwort vorgeschlagen? – Nkosi
Ja, ich habe das gleiche als Antwort –