我有一个网址:像这样: http://www.example/about/49
。
我希望它被视为 http://www.example/about/
,但我必须将此参数作为 QueryString
参数传递。< / p>
有可能吗?
答案 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