asp.net friendly-url

ASP.NET desactiva la página mobile.master de FriendlyURLs



friendly-url (8)

Aquí hay un artículo que he escrito para solucionar este problema. Consulte.

http://www.icodefor.net/2015/06/fixes-for-the-issue-the-relative-virtual-path-site.mobile.master-is-not-allowed-here-in-asp.net-friendly-urls.html

Me gustaría desactivar la página Site.Mobile.Master completamente. Mi sitio es receptivo y quiero que los navegadores móviles utilicen la misma página maestra.

¿Cómo puedo hacer esto en las direcciones URL amigables de ASP.NET?

Gracias


Cuando eliminé Site.Mobil.Master las páginas estaban rotas. Entonces ... prefiero simplemente establecer en Site.Mobile.Master configurar la información de Site.Master

CodeBehind = "Site.Master.cs" Inherits = "App.SiteMaster"

¡No es la mejor opción (LOL), pero está resuelta!


Elimine la página Site.Mobile.Master, y las URLs amigables solo usarán la página normal de Site.Master.


Es realmente extraño que no haya una manera fácil de deshacerse de la página maestra móvil. Si elimino Site.Mobile.Master.master, terminé con el error "El archivo ''/Site.Mobile.Master'' no existe".

Lo que hice para resolver este problema fue agregar los siguientes códigos en el evento de carga de página Site.Mobile.Master.cs.

var AlternateView = "Desktop"; var switchViewRouteName = "AspNet.FriendlyUrls.SwitchView"; var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true }); url += "?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl); Response.Redirect(url);


Me las arreglé para resolver este problema, cambiando lo siguiente:

1) He eliminado mobile.master

2) Cambié el código en ViewSwitcher.ascx.cs para seguirlo

protected void Page_Load(object sender, EventArgs e) { CurrentView = "Desktop"; AlternateView = "Desktop"; // Create switch URL from the route, e.g. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page var switchViewRouteName = "AspNet.FriendlyUrls.SwitchView"; var switchViewRoute = RouteTable.Routes[switchViewRouteName]; if (switchViewRoute == null) { // Friendly URLs is not enabled or the name of the switch view route is out of sync this.Visible = false; return; } var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true }); url += "?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl); SwitchUrl = url; }

3) Esto no funcionó, hasta que borré el directorio completo y lo volví a publicar. Creo que, eliminar algunos archivos específicos podría ayudar también. Pero como no tenía ese tipo de ambiente, entonces fui más fácil.


Me resultó más fácil simplemente eliminar (o renombrar) Site.Mobile.Master y ViewSwitcher.ascx. Esto pareció funcionar bien para mí.


Resolví simplemente agregando al final del evento "Page_Load" de "ViewSwitcher.ascx" la redirección guardada de forma predeterminada: Response.Redirect (url) Por lo tanto, el sub-resultado es:

Protected Sub Page_Load (remitente como objeto, e como EventArgs) ''Determinar la vista actual Dim isMobile = WebFormsFriendlyUrlResolver.IsMobileView (New HttpContextWrapper (Context)) CurrentView = If (isMobile, "Mobile", "Desktop")

'' Determinar la vista alternativa AlternateView = If(isMobile, "Desktop", "Mobile") '' Create URL de conmutador a partir de la ruta, p. ej. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page Dim switchViewRouteName = "AspNet.FriendlyUrls.SwitchView" Dim switchViewRoute = RouteTable.Routes(switchViewRouteName) If switchViewRoute Is Nothing Then '' Las URL descriptivas no están habilitadas o el nombre de la ruta de la vista del conmutador no está sincronizado Me.Visible = False Return End If Dim url = GetRouteUrl(switchViewRouteName, New With { .view = AlternateView, .__FriendlyUrls_SwitchViews = True }) url += "?ReturnUrl=" & HttpUtility.UrlEncode(Request.RawUrl) SwitchUrl = url **Response.Redirect(url)** End Sub


En realidad, parece que hay un error en la versión actual de las URLs site.mobile.master con Web Forms (1.0.2) que hace que este intento de acceso al site.mobile.master rompa con "The relative virtual path ''Site.Mobile.Master'' is not allowed here." en el código URL amigable. Simplemente me quemé por esto.

Para solucionarlo, usé una versión modificada del código en http://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/ : primero hice una clase de resolución:

/// <summary> /// This is a hack to force no mobile URL resolution in FriendlyUrls. There''s some kind of bug in the current version that /// causes it to do an internal failed resolve of a mobile master even though there is none. /// </summary> public class BugFixFriendlyUrlResolver: Microsoft.AspNet.FriendlyUrls.Resolvers.WebFormsFriendlyUrlResolver { protected override bool TrySetMobileMasterPage(HttpContextBase httpContext, Page page, string mobileSuffix) { return false; //return base.TrySetMobileMasterPage(httpContext, page, mobileSuffix); } }

luego lo usé en mi clase RouteConfig :

public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Permanent; routes.EnableFriendlyUrls(settings, new BugFixFriendlyUrlResolver()); }