隐藏QueryString参数,怎么样?

时间:2013-05-22 07:37:12

标签: c# asp.net-mvc-4 asp.net-mvc-routing

我有一个网址:像这样: http://www.example/about/49
我希望它被视为 http://www.example/about/ ,但我必须将此参数作为 QueryString 参数传递。< / p>

有可能吗?

2 个答案:

答案 0 :(得分:1)

小心会话变量;打开多个页面很容易,这些页面都使用相同的会话并最终混合值。

最好使用TempData,它只允许使用一次值(在第一次访问时删除)。但是,这意味着该值几乎会立即使用。

您还可以编写具有所需值的cookie,拦截请求(ASP.Net提供了多种执行此操作的方法,例如BeginRequest事件),并在内部处理URL,就像它包含的一样价值。

当然,您必须清理cookie(这将与基于会话的解决方案具有相同的问题)。请记住,cookie更容易被客户端篡改。

就我个人而言,我认为这些方法中的任何一种都比它们的价值要大得多。 “Hackable URLs”(例如包含可能有意义的ID的那些)通常是好的事物。

答案 1 :(得分:0)

我的解决方法(在SO社区的帮助下,这非常有效)

创建一个名为SiteSession.cs

的类

输入以下代码:

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for SiteSession
/// </summary>
public class SiteSession
{
    /// <summary>
    /// The _site session
    /// </summary>
    private const string _siteSession = "__SiteSession__";


    /// <summary>
    /// Prevents a default instance of the <see cref="SiteSession" /> class from being created.
    /// </summary>
    private SiteSession()
    {
    }

    /// <summary>
    /// Gets the current Session
    /// </summary>
    /// <value>The current.</value>
    public static SiteSession Current
    {
        get
        {
            SiteSession session = new SiteSession();
            try
            {
                session = HttpContext.Current.Session[_siteSession] as SiteSession;
            }
            catch(NullReferenceException asp)
            {

            }

            if (session == null)
            {
                session = new SiteSession();
                HttpContext.Current.Session[_siteSession] = session;
            }
            return session;
        }
    }

    //Session properties
    public int PageNumber {get;set;}

}

您可以在Session Properties中添加任何内容,只需确保其公开。

然后,通过以下方式设置:

SiteSession.Current.PageNumber = 42

并用

调用它

int whatever = SiteSession.Current.PageNumber