将Session []和Request []传递给C#中的方法

时间:2010-04-13 23:28:47

标签: c# asp.net

在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");

谢谢!

2 个答案:

答案 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();
}

值得注意的几点:

  1. 遵循您在框架中看到的样式指南。这意味着功能名称,参数名称等的相同大小。此外,不要缩写单词(即使用'parameter'而不是'param')。显式声明访问修饰符也是一个好主意(即如果你的方法是私有的,那么写private)。

  2. 永远不要使用try/catch来捕获非特定的异常。您最终可能会尝试吞下异常异常,例如内存不足或线程中止,这是灾难的一种方法。如果你不知道为什么你不应该捕获非特定的例外情况,那么在你知道之前更有理由不去。

  3. 永远不要抓住NullReferenceException(我怀疑是这里经常发生的异常,以及为什么try/catch块在那里)。每次抛出此异常时,您需要修复代码中的错误。与大多数开发规则不同,此规则没有例外。

答案 1 :(得分:0)

有什么问题
rslt = Session["MODE"] != null ? Session["Mode"] : Request["Mode"];
rslt = rslt ?? "someDefaultValue";