Domanda

un app MVC che utilizza le convenzioni cartella predefinita per i punti di vista HTML, ma vorremmo istituire cartella alternativa "Servizi" con i controller utilizzati solo per i servizi web di ritorno XML o JSON.

Quindi, il percorso "/ Servizi / Tasks / List" sarebbe stato indirizzato a "/Services/TaskService.cs", mentre "/ Tasks / Lista" sarebbero indirizzati allo standard "/Controllers/TaskController.cs"

Vorremmo mantenere il servizio controller separati dai controller di vista. Non pensiamo che le aree o utilizzando un altro progetto funzionerà. Quale sarebbe il modo migliore per affrontare questo?

È stato utile?

Soluzione

È possibile farlo utilizzando Routing, e mantenendo i controllori in spazi dei nomi separati. RottaMappa consente di specificare quali corrisponde ad un percorso spazio dei nomi.

Esempio

Dato questo controller

namespace CustomControllerFactory.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("Controllers");
        }
    }
}

namespace CustomControllerFactory.ServiceControllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("ServiceControllers");
        }
    }
}

E il seguente instradamento

 routes.MapRoute(
           "Services",
           "Services/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.ServiceControllers" } // Namespace
        );


        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.Controllers"} // Namespace
        );

Si dovrebbe aspettare le seguenti risposte

/ Servizi / Home

  
    

ServiceController

  

/ Home

  
    

Controller

  

Altri suggerimenti

Ti consigliamo di creare il proprio controller di fabbrica IControllerFactory attuazione.

http://nayyeri.net/custom-controller- fabbrica-in-asp-net-MVC per un esempio.

Se si vedono i nomi delle cartelle gialle Aggiungi cartella Nome root

Dopo, è necessario modificare routes.MapRoute in "App_Start> RouteConfig"

Modifica percorso predefinito

routes.MapRoute(
          "Default",
          "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id =     UrlParameter.Optional },
          new string[] { "mvcPartialView.HomeController" } // Namespace 
      );

e Aggiungi il

routes.MapRoute(
       "ApiControllerOne", // Name of folder
       "ApiControllerOne/{controller}/{action}/{id}",
        new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
        new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
    );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top