2015-10-26 17 views
8

Se abbiamo "nome_esempio" possiamo cambiarlo in url usando [ActionName ("")] Quindi, voglio farlo per il nome del controller.Come modificare il nome del controller MVC di ASP.NET nell'URL?

posso fare questo:

NomeControllore>example_nameController> in URL: "/ example_controller"

Vorrei cambiare il nome del controller come questo in URL: "/ example-conroller "

+0

Ciao, per il reindirizzamento si prega di vedere la mia risposta aggiornamento – user449689

risposta

13

È necessario utilizzare Attribute Routing, una caratteristica introdotta in MVC 5.

Basato sul tuo esempio si dovrebbe modificare il controller come segue:

[RoutePrefix("example-name")] 
public class example_nameController : Controller 
{ 
    // Route: example-name/Index 
    [Route] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    // Route: example-name/Contact 
    [Route] 
    public ActionResult Contact() 
    { 
     ViewBag.Message = "Your contact page."; 

     return View(); 
    } 
} 

Utilizzando l'attributo RoutePrefix in cima il tuo controller ti consentirà di definire il percorso sull'intero controller.

Come detto in precedenza, questa funzione è disponibile in modo nativo in MVC 5, se si utilizza una versione precedente di MVC è necessario aggiungere il seguente pacchetto NuGet: AttributeRouting e aggiungere il seguente utilizzando nel controller:

using AttributeRouting; 
using AttributeRouting.Web.Mvc; 


Se si dispone di un altro controller chiamato example_name2Controller e si desidera aggiungere un collegamento ipertestuale che collegano ad esso facilmente si può fare come segue:

@Html.ActionLink("Go to example-name2", "Index", "example_name2"); 

è don 'T bisogno di chiamare un'azione che reindirizza al example_name2Controller, ma se avete bisogno di farlo in altre occasioni, si può fare in questo modo:

public ActionResult RedirectToExample_Name2Controller() 
{ 
    return RedirectToAction("Index", "example_name2"); 
} 
+0

grazie per la risposta dettagliata. è meglio e mi ha aiutato. ho un'altra domanda. Ho un controller diverso, diciamo "example_controller2", quando faccio clic su "Contatto", quindi voglio andare "example_controller2" Ho cercato e penso che userò "RedirectToRoute". È una specie di "RedirectToAction" ma non l'ho fatto funzionare. – Cagatay

+0

Si prega di vedere le modifiche che ho fatto alla mia risposta – user449689

12

È possibile farlo attraverso il Routes.cs

routes.MapRoute(
     name: "Controller", 
     url: "example-controller/{action}", 
     defaults: new { 
     controller = "ControllerName", action ="Index" 
     } 
); 

C'è anche un altro modo, se si guarda alla risposta di questa domanda: How to achieve a dynamic controller and action method in ASP.NET MVC?

+0

grazie. per questo esempio; creeremo molti maproutes.sto cercando soluzioni diverse? – Cagatay

+0

@Cagatay Aggiorna la mia risposta. –

1

È possibile utilizzare Attribute Routing.

[RoutePrefix("Users")] 
public class HomeController : Controller 
{ 
    //Route: Users/Index 
    [Route("Index")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

grazie. sto usando mvc 5 ed è la soluzione migliore. – Cagatay

0

potete specificato nella Routes.cs

routes.MapRoute(
name: "College", 
url: "Student/{studentId}", 
defaults: new { controller = "Student", action = "Details"} 
); 

possiamo definire un tale vincolo come

routes.MapRoute(
    name: "College", 
    url: "Student/{studentId}", 
    defaults: new { controller = "Student", action = "Details"}, 
    constraints:new{[email protected]"\d+"} 
); 
3

risposta user449689s è buono, ma ha dimenticato di dire che è necessario aggiungere

012.
routes.MapMvcAttributeRoutes(); 

in RegisterRoutes() dei vostri RouteConfig.cs

Problemi correlati