2017-04-03 2 views
0

Ich benutze ASP.NET Core MVC 1.1 mit Visual Studio 2017 RTM. Meine Route Konfiguration ist unterIn ASP.NET Core MVC Route "MyWebsite/{ID}" nicht getroffen

app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 

Und meine HomeController/Index Aktion sieht so etwas wie unten

public async Task<IActionResult> Index(int? id) 

Die localhost url trifft die Index Aktion ganz gut mit id null zu sein. Aber wenn ich localhost/5 tippe, trifft es diese Handlung nicht, stattdessen gibt es 404 Fehler. Das ist wirklich sehr, sehr frustrierend, da intuitiv Ich dachte, wenn localhost Index trifft, dann localhost/5 es auch treffen sollte

+3

'bricht localhost/5 bedeutet, dass ein Controller namens '5Controller' gesucht wird, der nicht existieren kann (das erste Segment in Ihrer Routendefinition ist der Controller). –

+0

Wie kann ich diese Route dann anpassen? Definieren Sie eine andere Route? – imgen

+0

Wenn Sie versuchen, "localhost? Id = 5" findet es die URL? –

Antwort

1

template: "{controller=Home}/{action=Index}/{id?}" bedeutet, dass, wenn kein Controller und die Aktion angegeben wird (nur die Basis-URL wie Localhost: XXXX) , gehen Sie zu einem Controller namens Home und Aktion mit dem Namen Index und die ID kann optional sein. Wenn Sie einen Wert als Id zum Index-Methode in Heimsteuerung übergeben möchten, müssen Sie ::

    Ihre URL ändern Lokaler Host
  1. : XXXX/Home/Index/1
  2. eine Route Attribut auf Index-Methode hinzufügen dass [Route("id?")] und Sie in der Lage sein werden, Ihr gewünschtes Ergebnis zu erreichen. Dies könnte die Standard-Routing-
+0

gibt es eine nicht störende Möglichkeit, dies zu erreichen? Ich habe Code 'routes.MapRoute (Name:" vol ", Vorlage:" {id} ", defaults: new {controller =" Home ", action =" Index "});' um das Ziel zu erreichen, aber ich bin es nicht sicher, es ist der beste Weg, es zu tun. – imgen

0

Danke für die Tipps von @BrianMains und @McKabue stören, komme ich mit einer Lösung bis

[Route("{id:int}")] 
public IActionResult IdRoute(int id) 
{ 
    .... 
} 

diese Weise ist es nicht Standardroute