Ho un servizio WCF che vive in parallelo con un sito Web MVC2. Mi piacerebbe per il mio URL per il servizio a guardare come questo:Routing MVC2 con servizio WCFRoute: Html.ActionLink che mostra collegamenti errati!
http://localhost/projdir/Service
Il sito MVC è nella sua infanzia quindi ha ancora tutti i suoi controllori boilerplate ecc
Il seguente codice funziona a primo sguardo su global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("Service", new ServiceHostFactory(),
typeof(MyService)));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
}
Il servizio appare proprio dove ho descritto e funziona come pubblicizzato. Grande.
Tuttavia, ho appena notato che l'ordine del mio codice in questo modo cambia tutti i miei ActionLink
. Ad esempio, la scheda "Informazioni" sul sito MVC ora appare così:
http://localhost/projdir/Service?action=About&controller=Home
Questo è ovviamente corretta (dovrebbe essere http://localhost/projdir/Home/About/
).
Se si sposta l'aggiunta ServiceRoute
al di sotto della chiamata predefinita MapRoute()
, viene visualizzato un errore del controller mancante. (In realtà ottengo un errore "StructureMapControllerFactory non restituisce un'istanza di un controller", perché sono cablato con StructureMap, duh, non è un controller per cominciare.)
È interessante notare che sembra solo influenzare l'output di Html.ActionLink()
. Posso digitare manualmente http://localhost/projdir/Home/About/
e arrivare alla pagina corretta.
Quale errore newbie orribilmente ovvio sto facendo?
possibilmente correlate? http://stackoverflow.com/questions/1470997/html-actionlink-construct-wrong-link-when-a-non-mvc-route-is-added – roufamatic