4

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

可能吗 ?

4

2 回答 2

1

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

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

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

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

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

于 2013-05-22T08:09:41.113 回答
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

于 2013-05-22T07:43:44.013 回答