2015-12-29 3 views
2

J'ai un site Web développé dans MVC 5, j'utilise attributs de route pour le routage. J'ai mis lecontrôleur par défaut et leaction par défaut pour chaque contrôleur en utilisant le code suivantContrôleur par défaut et action par défaut dans MVC5

public class CompanyController : MainController 
{ 
    [Route("~/", Name = "default")] 
    [Route("Company/Index")] 
    public ActionResult Index(string filter = null) 
    { 
    //My code here 
    } 

    [Route("Company/Edit")] 
    public ActionResult Edit(int id) 
    { 
    //My code here 
    } 
} 

J'ai un autre contrôleur avec une action par défaut:

[RoutePrefix("Analyst")] 
[Route("{action=Index}")] 
    public class AnalystController : MainController 
{ 
    [Route("Analyst/Index")] 
    public ActionResult Index(string filter = null) 
    { 
     //My code here 
    } 

    [Route("Analyst/Edit")] 
    public ActionResult Edit(int id) 
    { 
    //My code here 
    } 
} 

Le contrôleur par défaut a fonctionné parfaitement, mais lorsque je navigue vers le contrôleur de l'analyste sans spécifier le nom de l'action, je reçois le suivant ROR:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL. 

The request has found the following matching controller types: 
SurveyWebsite.Controllers.AnalystController 
SurveyWebsite.Controllers.CompanyController 

Comment puis-je corriger naviguer à http://localhost:61534/analyst et atteindre l'action par défaut (index)? L'action devrait également rester accessible par http://localhost:61534/analyst/Index Merci pour votre aide.

Répondre

4

Donnez une chaîne vide comme valeur de route pour l'action d'index afin qu'elle fonctionne pour Analyst, qui est le préfixe de votre route de contrôleur. Vous pouvez décorer avec un deuxième attribut Route pour qu'il fonctionne avec l'URL "Analyst/Index" où vous passerez "Index".

[RoutePrefix("Analyst")] 
public class AnalystController : MainController 
{ 
    [Route("")] 
    [Route("Index")] 
    public ActionResult Index(string filter = null) 
    { 
     //My code here 
    } 

    [Route("Edit/{id}")] 
    public ActionResult Edit(int id) 
    { 
    //My code here 
    } 
} 

Cela fonctionne pour les deux /Analyst et /Analyst/Index

+0

Merci pour votre réponse, mais l'action ne sera pas accessible par http: // localhost: 61534/analyste/Index –

+0

@BilelChaouadi Maladroit que partie dans votre question :(J'ai mis à jour ma réponse pour travailler avec les deux urls – Shyju

+0

Merci, ça fonctionne :) –