2016-06-20 16 views
1

Ich muss eine Handvoll statischer Webseiten aktualisieren, und ich möchte diese Zeit verwenden, um sie mit ASP.NET Core (ASP.NET 5 mit MVC 6) in Visual Studio 2015 neu zu erstellen. Ich möchte es mit der neuesten Technologie von Microsoft wiederherstellen, um die Änderungen in Zukunft zu vereinfachen.ASP.NET Core Route ändern

Wenn ich das Projekt auf localhost starte, wird die Standardwebsite geladen, aber alle verknüpften Seiten werden unterbrochen, da sie standardmäßig zum Controller /Home geleitet werden. Auch keine der jquery, css oder Bilder werden gefunden, wenn MVC diese Seiten nistet.

In der Datei Startup.cs, gibt es die folgende Methode:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseDatabaseErrorPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    app.UseStaticFiles(); 

    app.UseIdentity(); 

    // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715 

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

Dies ist, wie es aus der Box konfiguriert kommt.

Unsere Firma möchte nicht /Home (oder irgendetwas anderes) auf der URL aller ihrer Webseiten stecken.

Ich habe verschiedene IActionResult Methoden für die verschiedenen Seiten erstellt, aber alle von ihnen tun das Gleiche:

public IActionResult Index() 
{ 
    return View(); 
} 

Wir haben Unternehmen auch, die auf unserer Website verlinken. Wenn wir die Struktur unserer Seiten ändern, werden auch andere Unternehmen damit aufhören und Änderungen vornehmen.

Wie würde ich eine Zeichenfolge, wie {controller}/{action}/{id?}, nehmen und eine typische Verbindung wie action.aspx?id=x zurückgeben?

Gibt es alternativ eine Möglichkeit, MVC mitzuteilen, keine Vorlage für bestimmte Seiten zu verwenden?

Ich entschuldige mich, wenn das dumm ist grundlegend. Ich arbeite generell an Windows Forms.

+0

Ich bin nicht sicher, was ist der Vorteil Ihrer Übung, wenn Sie nicht bereit sind, zugrunde liegenden Rahmen zu nutzen. Wenn MVC nicht etwas ist, das du willst, dann würde ich vorschlagen, bei dem zu bleiben, was du in der Hand hast. – Saleem

+1

@Saleem, es wird schwierig, Dinge mit Microsoft zu machen, wenn es nicht in MCV ist (hauptsächlich Social Media Integration). Wenn ich nie anfange, Teile davon zu lernen, werde ich nie wissen, wie ich etwas davon verwenden soll. – jp2code

Antwort

1

Es gibt zwei Lösungen:

Strecke Vorlage:

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     "HomeRoute", 
     "{action}/{id}", 
     new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }); 
}); 

Attribut Routen

[HttpGet("")] 
public IActionResult Index() 
{ 
    return View(); 
} 

Sie können ein neues Projekt für ein voll funktionierendes Beispiel mit dieser Methode unter Verwendung von ASP.NET MVC Boilerplate erstellen.

+0

Wie gehe ich mit den anderen Controller-Aktionen um, wie ** Kontakte **, ** News ** und ** Sales **? Wie oben bearbeitet, bekomme ich 'AmbiguousActionException: Mehrere Aktionen übereinstimmen. ' – jp2code

+0

Ich sehe es. Ich verwendete [Daniels Antwort] (http://stackoverflow.com/a/30964951/153923), um jeder Aktion einen Namen zu geben (d. H. Contact.html, News.html, Sales.html). – jp2code