只要具有特定值,ASP.NET就会附加QueryString

时间:2013-02-14 22:40:15

标签: asp.net mobile query-string

我有一个移动网站和一个普通网站。在移动设备上,它在普通网站上检测到是移动设备并重定向到移动网站。 我还可以通过添加查询字符串从移动网站返回到普通网站: no_redirect =真

这样JS就不会再次执行移动检测代码了。

我的这个仅用于我的主页(移动检测),因此当我导航到我的普通网站中的其他页面时,QueryString不再存在。一旦我回到主页,我将再次被重定向到移动网站(没有QueryString,所以移动检测开始了)。

移动网站上的正常网站示例网址: http://www.mysite.com/default.aspx?no_redirect=true

我正在寻找一种方法,一旦设置/存在,就将QueryString no_redirect = true添加到所有页面。只有当我从我的移动网站导航回标准网站时才会发生这种情况。这样可以避免我每次访问主页时都需要从手机来回切换。

有人为此提出任何想法或解决方案。

提前谢谢

3 个答案:

答案 0 :(得分:1)

感谢您的快速回复!但我让它像这样工作。

也许人们想知道为什么我只在主页上进行移动检测?这是因为它是一个响应式网站,但最初我想显示移动网站,因为它在3G上加载速度非常快。当然,当有人进入另一个URL时,它会立即显示响应式网站。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

If Request.QueryString("no_redirect") IsNot Nothing AndAlso Not String.IsNullOrEmpty(Request.QueryString("no_redirect").ToString()) Then
Dim cookie As New HttpCookie("no_redirect")
    cookie.Value = Request.QueryString("no_redirect").ToString()
    cookie.Expires = DateTime.Now.AddMinutes(10)
    Response.Cookies.Add(cookie)
Else
    If Request.Cookies("no_redirect") IsNot Nothing Then
        Response.Redirect("/default.aspx?no_redirect=true")
    End If
End If
End Sub

答案 1 :(得分:1)

由于您正在使用asp.net,为什么不使用IIS提供的功能?

IIS提供了一个Url Rewrite模块,对于这种情况来说,这是一个完美的方法。

你是否想要将你的变量附加到网址,这取决于你,我强烈建议你反对它,因为人们倾向于为网址添加书签并分享这些书签。某人最初共享在不同类型的设备上使用的链接的可能性非常大,并且导致糟糕的用户体验。

stackoverflow中已经有一个问题可以解决你所面临的问题。

IIS URL Rewrite rule for mobile with "nomobile" cookie

在将请求传递给ASP.NET管道之前,规则的处理在服务器上进行,这意味着您不需要“初始”加载任何页面然后重定向。这与您目前提出的解决方案完全相反。

查看我链接的问题,如果您真的希望附加查询字符串,只需在web.config上将appendQueryString属性更改为true。

答案 2 :(得分:0)

我建议使用Session变量,而不是尝试修改每个链接。但是,这里有一些可能有帮助的jquery

$(document).ready(function() {
    $('a').each(function(i,o) {
        var href = $(o).attr('href');
        if (href.indexOf('?') > 0) href = href + '&no_redirect=true';
        else href = href + '?no_redirect=true';
        $(o).attr('href', href);
    });
});

http://jsfiddle.net/cEKeK/