0

Ich habe eine Verpflichtung, wo die Ressourcen auf dem Home-Controller sollten, ohne die Notwendigkeit zugegriffen werden, um den Namen des Controllers in der URL einzugeben. Zum Beispiel sollte index Aktion geladen, wenn ich zu mysite.com/ und Kontaktseite navigieren sollte mit mysite.com/contact und so weiter geladen werden.MVC 5 Attribut Routing: Entfernen Unnötige Routen Attribut Von Controller-Aktionen

Der Controller unten erfüllt diese Anforderung, aber ich frage mich, ob es einen Weg gibt zu entfernen Routen Attribute, die den gleichen Namen wie die Controller-Aktion haben?

Zum Beispiel mit [Route("contact")] Handlungs Kontakt macht keinen Sinn. Wenn ich diese Route Attribut entfernen, wird die URL erzeugt als mysite.com/home/contact während ich diese mysite.com/contact sein will.

[RoutePrefix("")] // Remove the name of the controller from the URL 
public class HomeController : Controller 
{ 


    public ViewResult Index() 
    { 
     return View("Index"); 
    } 

    [Route("contact")] 
    public ViewResult Contact() 
    { 
     return View("Contact"); 
    } 

    [Route("about")] 
    public ViewResult About() 
    { 
     return View("About"); 
    } 

    [Route("terms-and-conditions")] 
    public ViewResult TermsAndConditions() 
    { 
     return View("TermsAndConditions"); 
    } 
} 

FYI, hier meine Route Config ist:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapMvcAttributeRoutes(); 

     routes.LowercaseUrls = true; 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

und das Ereignis Application_Start:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

Antwort

0

Statt einen leeren Wert als die Route Präfix verwenden, landete ich die Verwendung von bis Routenattribut für bestimmte Controller-Aktionen wie die folgenden:

public class HomeController : Controller 
{ 
    public ViewResult Index() 
    { 
     return View("Index"); 
    } 

    [Route("contact-us")] 
    public ViewResult Contact() 
    { 
     return View("Contact"); 
    } 

    [Route("about-us")] 
    public ViewResult About() 
    { 
     return View("About"); 
    } 

    [Route("terms-and-conditions")] 
    public ViewResult TermsAndConditions() 
    { 
     return View("TermsAndConditions"); 
    } 
} 
Diese 10

stellt sicher, dass jede definierte Weg von der Wurzel des Aufstellungsortes zugegriffen wird.

Verwandte Themen