我想把HttpContext.Current.Request和HttpContext.Current.Session一起包装成一个类。
基本上我想写col [“key”];并检查其中一个是否为密钥,如果不存在则检查另一个。
AFAIK他们不共享界面(我使用“转到定义”环顾四周,但我非常糟糕)。我如何编写一个可以将这两种类型作为参数的类?我尝试编写一个接口但是没有用,因为这些类不会从它们继承。我尝试分配对象o =请求;然后写对象o2 = o [“key”];但这也造成了编译错误。
我很肯定这可以轻松完成但我不知道如何。
答案 0 :(得分:4)
扩展方法怎么样? E.g:
public static object Get(this HttpContext context, string key)
{
return context.Request[key] ?? context.Session[key];
}
现在你可以像这样使用它了
HttpContext.Current.Get(key);
答案 1 :(得分:2)
public class RequestOrSession
{
public object this[string key]
{
get
{
HttpContext context = HttpContext.Current;
if (context == null)
{
throw new InvalidOperationException("Where's the HttpContext?");
}
// if the same key exists in Request and Session
// then Request will currently be given priority
return context.Request[key] ?? context.Session[key];
}
}
}
答案 2 :(得分:2)
HttpRequest有一个索引器可以执行此操作,但不适用于会话 - 虽然它很慢(来自反射器的代码):
public string this[string key]
{
get
{
string str = this.QueryString[key];
if (str != null)
{
return str;
}
str = this.Form[key];
if (str != null)
{
return str;
}
HttpCookie cookie = this.Cookies[key];
if (cookie != null)
{
return cookie.Value;
}
str = this.ServerVariables[key];
if (str != null)
{
return str;
}
return null;
}
}
这不是一个真正的答案,只是一个观察。由于它包含一个代码示例,我没有把它作为评论。