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

Asp.net禁用site.Mobile.Master

ASP.NET WebForms FriendlyUrlSegments 不包含采用 0 个参数的构造函数

ASP.NET MVC - 如何用破折号替换 %20? [复制]