2017-10-03 4 views
2

Ich habe einen ASP.Net Core 2.0 mit einem Controller erstellt, kein Problem. Dann habe ich einen anderen Controller hinzugefügt, dann ist diese Ausnahme angezeigt:ASP.Net Core 2 mehrere Controller

InvalidOperationException: Folgende Fehler mit Attribut Routing-Informationen aufgetreten:

Fehler 1: Attribut Routen mit dem gleichen Namen ‚Get‘ müssen die gleiche haben Vorlage: Aktion: 'Patrimonio.Controllers.CategoriaController.Getcc (Patrimonio)' - Vorlage: 'api/Categoria/{id}' Aktion: 'Patrimonio.Controllers.PatrimonioController.Getac (Patrimonio)' - Vorlage: ' api/Patrimonio/{id} ' Microsoft.AspNetCore.Mvc.Int ernal.ControllerActionDescriptorBuilder.Build (ApplicationModel Anwendung)

der erste Controller hat

// GET: api/Categoria 
[Route("api/Categoria")] 
public class CategoriaController : Controller 
... 
[HttpGet] 
public IEnumerable<string> Geta() 
{ 
    return new string[] { "value1", "value2" }; 
} 

das zweite hat

// GET: api/Patrimonio/5 
[Route("api/Patrimonio")] 
public class PatrimonioController : Controller 
... 
[HttpGet("{id}", Name = "Get")] 
public string Getac(string id) 
{ 
    return "value" + id; 
} 

Auch mit dem Getac und Getcc, ASP.Net Core beschwert sich darüber Name 'Get'.

Wie löst man das?

+1

Interessante ersetzen! Das sollte funktionieren. Haben Sie einen anderen Routingdefinitionscode, den Sie woanders verwenden? – Shyju

+0

Ich habe versucht app.UseMvc(); //app.UseMvcWithDefaultRoute(); scheint aber keine Wirkung zu haben, um dies zu lösen. – Tony

Antwort

8

Ihre Fehlermeldung entspricht nicht dem von Ihnen geposteten Code. Aber es scheint, dass Sie zwei [Http*(Name = "Get")] Annotationen in Ihrem Programm haben. Routennamen müssen jedoch eindeutig sein.

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing#route-name

Oder genauer gesagt, erscheint es aus der Fehlermeldung, dass zwei Aktionen mit dem gleichen Routennamen genau die gleiche URL-Vorlage haben. Der Grund dafür ist, dass der Routenname hauptsächlich für das umgekehrte Routing verwendet wird (d. H. Eine URL zu einer Aktion generiert wird). Wenn der Name nicht eindeutig ist, ist die URL nicht eindeutig - es sei denn, alle Routen mit demselben Namen haben die gleiche Vorlage.

Versuchen

[HttpGet("{id}", Name = "Get")] 

mit

[HttpGet("{id}")] 
+0

Ehrfürchtig. Du hast genau diagnostiziert. Ich habe nicht wahrgenommen, dass der "Get" ASP.Net Core sich beschweren würde bei der Attributdeklaration Name = "Get". Ich dachte, es war der Name der Methode. – Tony