在C#中,如何将Session []和Request []对象传递给方法?
我想使用一种方法来解析.aspx页面的Session和Request参数,以减小我的Page_Load方法的大小。我传递了很多变量,需要支持POST和GET方法。对于大多数调用,并非所有变量都存在,因此我必须以多种方式测试每个变量,并且代码变长......
这就是我想要做的,但我似乎无法正确识别会话和请求参数(此代码将无法编译,因为数组已按编号索引)
static string getParam(
System.Web.SessionState.HttpSessionState[] Session,
System.Web.HttpRequest[] Request,
string id)
{
string rslt = "";
try
{
rslt = Session[id].ToString();
}
catch
{
try
{
rslt = Request[id].ToString();
}
catch { }
}
return rslt;
}
从Page_Load,我想按如下方式调用此方法来检索“MODE”参数:
string rslt;
rslt = getParam(Session, Request, "MODE");
谢谢!
答案 0 :(得分:3)
您不需要将它们声明为数组参数;它们不是数组,它们只是一个对象。所以你的函数签名应该是这样的:
static string getParam(
System.Web.SessionState.HttpSessionState Session,
System.Web.HttpRequest Request,
string id)
只需进行更改,您的代码就可以正常工作,但可以进行相当多的改进,例如以下内容相同,但没有NullReferenceException
的风险:
private static string GetParameter(
HttpSessionState session,
HttpRequest request,
string id)
{
var value = session[id] ?? request[id];
return value == null ? string.Empty : value.ToString();
}
值得注意的几点:
遵循您在框架中看到的样式指南。这意味着功能名称,参数名称等的相同大小。此外,不要缩写单词(即使用'parameter'而不是'param')。显式声明访问修饰符也是一个好主意(即如果你的方法是私有的,那么写private
)。
永远不要使用try/catch
来捕获非特定的异常。您最终可能会尝试吞下异常异常,例如内存不足或线程中止,这是灾难的一种方法。如果你不知道为什么你不应该捕获非特定的例外情况,那么在你知道之前更有理由不去。
永远不要抓住NullReferenceException
(我怀疑是这里经常发生的异常,以及为什么try/catch
块在那里)。每次抛出此异常时,您需要修复代码中的错误。与大多数开发规则不同,此规则没有例外。
答案 1 :(得分:0)
有什么问题
rslt = Session["MODE"] != null ? Session["Mode"] : Request["Mode"];
rslt = rslt ?? "someDefaultValue";