2012-12-04 10 views
10

C'è un modo per aggiungere sottocartelle nella cartella Controller di un progetto Webapi?Aggiunta di sottocartelle nella cartella controller - .net webapi

Sto pensando a qualcosa come Controller/Cliente include i controller per il modulo Cliente.

+0

quello che voglio è quello di avere il nome della cartella secondaria nell'URL. vale a dire lolcalhost/weApp/{foldername}/{controller} – mangun

risposta

5

I controller non funzionano in questo modo. In Asp.NET la struttura delle cartelle è la struttura del tuo sito web. Nell'API WEB, i controller vengono cercati indipendentemente dalla struttura. È un dato di fatto, è possibile averli in diversi assembly e saranno ancora trovati dal framework. Il routing non funzionerà nel modo previsto. Puoi aggiungere un percorso in cui hai il tuo "nome cartella", come hai detto, localhost/WebApp/{foldername}/{controller}. Solo {foldername} può essere un nome di cartella semplice e statico (localhost/WebApp/foldername/{controller}). Quindi il client dovrà chiamare l'url con "foldername" al suo interno, ma l'ubicazione del codice non avrebbe importanza perché il framework MVC non differenzia gli alberi delle cartelle sotto i controller.

2

Quello che faccio per risolvere questo problema per me è aggiungere un altro Maproute e aggiungere spazio dei nomi prima del controller. Basta essere consapevoli di due punti:

  1. Il nuovo rotta dovrebbe essere prima di quello di default
  2. Non è possibile aggiungere lo spazio dei nomi per quella di default

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

Le risposte qui sono sbagliato . Puoi farlo facilmente. Hai solo bisogno di specificare il percorso sul tuo classe controller:

Situato nel /Controllers/Authentication cartella

//An example of you specifying a diff. route than the folder path 
[Route("api/login")] 
public class LoginController {...} 
+1

Penso che nel tuo esempio qui, dovrebbe essere '[RoutePrefix (" api/login ")]' e non '[Route (...)]'. L'attributo '[Route (...)]' andrebbe su singole azioni all'interno della classe 'LoginController'. – Jiveman

Problemi correlati