Come indirizzare una pagina .aspx nel progetto asp.net mvc 3?

Ho una pagina .aspx nel seguente percorso:

Areas/Management/Views/Ticket/Report.aspx 

Voglio instradarlo nel seguente percorso nel mio browser:

 http://localhost/Reports/Tickets 

Come lo posso fare?

Ci provo:

 routes.MapRoute( "Tickets", // Route name "Areas/Management/Views/Ticket/Report.aspx", // Original URL new { controller = "Reports", action = "Tickets" } // New URL ); 

Ma ho avuto l’errore 404 .

Cosa sto facendo di sbagliato?

Obs: l’ho messo prima del percorso Default .

Se si sta tentando di utilizzare i moduli Web in un progetto MVC, spostarei .aspx fuori dalla cartella Viste, in quanto non è realmente una vista, quindi qualcosa come WebForms / Tickets / Report.aspx.

Nei moduli Web si MapPageRoute il MapPageRoute una rotta chiamando il metodo MapPageRoute .

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Tickets/Report.aspx"); routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

Dovrai metterlo prima del percorso MVC predefinito.

Risolto! Pertanto, è necessario aggiungere un percorso di contraint all’itinerario delle rotte per assicurarsi che si attacchi solo alle rotte in arrivo, non alla generazione di rotte in uscita.

Aggiungi la seguente class al tuo progetto (in un nuovo file o nella parte inferiore di global.asax.cs):

 public class MyCustomConstaint : IRouteConstraint{ public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){ return routeDirection == RouteDirection.IncomingRequest; } } 

Quindi modificare il percorso dei biglietti al seguente:

 routes.MapPageRoute( "Tickets", "Reports/Tickets", "~/WebForms/Reports/Tickets.aspx", true, null, new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } } ); 

lo stai facendo di fronte. questo mappa la tua url Areas/Management/Views/Ticket/Report.aspx a { controller = "Reports", action = "Tickets" }
quello che dovresti fare è impostare l’url come
EDIT dei Reports/Tickets : – potete creare un routeHandler solo per il routing a questa pagina .aspx. Come questo.

 public class ASPXRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { return BuildManager.CreateInstanceFromVirtualPath("~/Areas/Management/Views/Ticket/Report.aspx", typeof(Page)) as Page; } } 

quindi puoi aggiungere la tua rotta alla tabella dei percorsi esistente usando

 Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler()); routes.Add(customRoute); 

se si lascia il routing predefinito quando si crea il progetto asp.net

 public class ReportsController : Controller { public ActionResult Ticket() { return View(); } } 

questo dovrebbe fare il trucco. Il routing in asp.net mvc significa che non si collega direttamente a .aspx ma a Azioni (metodi) che a loro volta restituiscono una vista appropriata ( .aspx)