ASP.NET 关闭 FriendlyURLs mobile.master 页面
Posted
技术标签:
【中文标题】ASP.NET 关闭 FriendlyURLs mobile.master 页面【英文标题】:ASP.NET turn off FriendlyURLs mobile.master page 【发布时间】:2014-01-07 19:08:43 【问题描述】:我想完全关闭 Site.Mobile.Master 页面。我的网站是响应式的,我希望移动浏览器使用相同的母版页。
如何在 ASP.NET 友好的 URL 中做到这一点
谢谢
【问题讨论】:
【参考方案1】:我发现删除(或重命名)Site.Mobile.Master 和 ViewSwitcher.ascx 更容易。这对我来说似乎工作得很好。
【讨论】:
【参考方案2】:我解决了这个问题,只需在“ViewSwitcher.ascx”的“Page_Load”事件末尾添加默认保存的重定向: 响应。重定向(网址) 所以子结果是:
Protected Sub Page_Load(sender As Object, e As EventArgs) ' Determinar la vista 实际 暗淡 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
【讨论】:
【参考方案3】:我通过更改以下内容设法解决了这个问题:
1) 我删除了 mobile.master
2) 我将 ViewSwitcher.ascx.cs 中的代码更改为以下代码
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) 这不起作用,直到我删除了整个目录并重新发布它。我认为,删除一些特定文件也可能会有所帮助。但是因为我没有那种环境,所以我走的比较轻松。
【讨论】:
【参考方案4】:这是我写的一篇文章来解决这个问题。请参考。
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
【讨论】:
我在默认的 VS Web 项目中的任何地方都找不到 TrySetMobileMasterPage()。在 VS2013 中是否有不同的方法? 我发现它隐藏在 Microsoft.AspNet.FriendlyUrls.dll 中,我想 MS 不会提供那个源代码(不是你真的需要它)【参考方案5】:在当前版本的 Web 表单友好 URL (1.0.2) 中实际上似乎存在一个错误,导致此尝试访问友好 URL 代码中的 site.mobile.master
中断与 "The relative virtual path 'Site.Mobile.Master' is not allowed here."
。我只是被这个烧死了。
为了修复它,我在http://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/ 使用了代码的修改版本 - 首先创建了一个解析器类:
/// <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);
然后在我的RouteConfig
类中使用它:
public static void RegisterRoutes(RouteCollection routes)
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings, new BugFixFriendlyUrlResolver());
【讨论】:
不确定我是否理解这个问题。解析器类只是项目中的一个类,在标准开箱即用RouteConfig
中注册在App_Start
中,如图所示。 RouteConfig
是从 Global.asax.cs
调用的。
我最终把它放在了 App_Start 中
这是我可以真正删除 Site.Mobile.Master 的唯一解决方案。谢谢!【参考方案6】:
很难摆脱移动母版页,这真是太奇怪了。如果我删除 Site.Mobile.Master.master,我会以错误“文件 '/Site.Mobile.Master' 不存在”结束。
我为解决此问题所做的是将以下代码添加到 Site.Mobile.Master.cs Page_Load 事件中。
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);
【讨论】:
【参考方案7】:当我删除 Site.Mobil.Master 时,页面已损坏。 所以... 我更喜欢在 Site.Mobile.Master 中设置 Site.Master 的信息
CodeBehind="Site.Master.cs" Inherits="App.SiteMaster"
这不是最好的选择(LOL),但解决了!
【讨论】:
这是唯一对我有用的东西。荒谬的。用我的 Site.Master 文件替换了 Site.Mobile.Master 中的所有内容,除了我按照上面建议更新的第 1 行 ()。【参考方案8】:删除 Site.Mobile.Master 页面,友好 URL 将只使用常规 Site.Master 页面。
【讨论】:
截至 2021 年 3 月,此答案并非在所有情况下都有效。请参阅 MikeBaz 的答案以获得更清洁的解决方案。以上是关于ASP.NET 关闭 FriendlyURLs mobile.master 页面的主要内容,如果未能解决你的问题,请参考以下文章
添加 FriendlyUrls 时,jQuery ajax 调用不适用于 ASP.Net Web 窗体
是否可以使用 ASP.NET FriendlyUrls 摆脱“索引”?
带有 FriendlyUrls 和 debug="false" 的 ASP.NET WebForms 项目在生产中引发 404