我有一个 url: 像这个: http://www.example/about/49
。
我希望它被视为http://www.example/about/
,但我必须将此参数作为QueryString
参数传递。
可能吗 ?
我有一个 url: 像这个: http://www.example/about/49
。
我希望它被视为http://www.example/about/
,但我必须将此参数作为QueryString
参数传递。
可能吗 ?
小心会话变量;很容易打开多个页面,这些页面都使用相同的会话并最终混合了这些值。
最好使用TempData
,它只允许使用一次值(在第一次访问时删除)。但是,这意味着该值将几乎立即使用。
您还可以编写具有所需值的 cookie,拦截请求(ASP.Net 提供了多种执行此操作的方法,例如BeginRequest
事件),并在内部处理 URL,就好像它包含该值一样。
当然,您必须随后清理 cookie(这将与基于会话的解决方案具有相同的问题)。请记住,cookie 更容易在客户端上被篡改。
就个人而言,我认为这些方法中的任何一种都比它们的价值要麻烦得多。“可破解的 URL ”(例如那些包含可能有意义的 ID 的 URL)通常是一件好事。
我的解决方法(非常有效,感谢 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