C# 将会话[]和请求[]传递给C中的方法#

C# 将会话[]和请求[]传递给C中的方法#,c#,asp.net,C#,Asp.net,在C#中,如何将会话[]和请求[]对象传递给方法 我想使用一种方法来解析会话并请求.aspx页面的参数,以减小我的页面加载方法的大小。我传递了很多变量,需要同时支持post和GET方法。对于大多数调用,并不是所有变量都存在,所以我必须以多种方式测试每个变量,代码会变长 这就是我试图做的,但我似乎无法正确识别会话和请求参数(这段代码不会编译,因为数组是按数字索引的) 在Page_Load中,我想按如下方式调用此方法以检索“MODE”参数: string rslt; rslt = getParam(

在C#中,如何将会话[]和请求[]对象传递给方法

我想使用一种方法来解析会话并请求.aspx页面的参数,以减小我的页面加载方法的大小。我传递了很多变量,需要同时支持post和GET方法。对于大多数调用,并不是所有变量都存在,所以我必须以多种方式测试每个变量,代码会变长

这就是我试图做的,但我似乎无法正确识别会话和请求参数(这段代码不会编译,因为数组是按数字索引的)

在Page_Load中,我想按如下方式调用此方法以检索“MODE”参数:

string rslt;
rslt = getParam(Session, Request, "MODE");
谢谢

你怎么了

rslt = Session["MODE"] != null ? Session["Mode"] : Request["Mode"];
rslt = rslt ?? "someDefaultValue";

你怎么了

rslt = Session["MODE"] != null ? Session["Mode"] : Request["Mode"];
rslt = rslt ?? "someDefaultValue";

您不需要将它们声明为数组参数;它们不是数组,它们只是一个对象。因此,您的函数签名应该如下所示:

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
    块出现的原因)。每当抛出此异常时,您都需要修复代码中的错误。与大多数发展规则不同,这一规则没有例外


  • 您不需要将它们声明为数组参数;它们不是数组,它们只是一个对象。因此,您的函数签名应该如下所示:

    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
    块出现的原因)。每当抛出此异常时,您都需要修复代码中的错误。与大多数发展规则不同,这一规则没有例外


  • 在看到你的帖子之前,我从未想过要尝试一下。但这也是有效的语法。返回会话[id]??请求[id]??字符串。空@gbogumil-是的,这是有效的语法,但它的功能与上面的代码不同。请注意(根据原始帖子中的逻辑),非空值需要转换为字符串。我本可以完成
    (会话[id]?请求[id]?字符串.Empty)。不过,ToString()
    ,这一点值得注意。如果我对整个函数进行编码,它就不会编译,因为对象不能作为字符串返回。ToString()可以实现这一点。我很高兴学习了一些新的有效语法。谢谢你的回复-这很有效。不知怎的,我怀疑这种尝试会引起注意。不幸的是,我被扔进了C#,而我只是快速地学习它(我没有用C风格的语言做太多其他工作)。这个然后呢?语法对我来说是新的,我无法找出其他方法来防止NullReferenceException。谢谢你的帮助…在看到你的帖子之前,我从没想过要尝试一下。但这也是有效的语法。返回会话[id]??请求[id]??字符串。空@gbogumil-是的,这是有效的语法,但它的功能与上面的代码不同。请注意(根据原始帖子中的逻辑),非空值需要转换为字符串。我本可以完成
    (会话[id]?请求[id]?字符串.Empty)。不过,ToString()
    ,这一点值得注意。如果我对整个函数进行编码,它就不会编译,因为对象不能作为字符串返回。ToString()可以实现这一点。我很高兴学习了一些新的有效语法。谢谢你的回复-这很有效。不知怎的,我怀疑这种尝试会引起注意。不幸的是,我被扔进了C#,而我只是快速地学习它(我没有用C风格的语言做太多其他工作)。这个然后呢?语法对我来说是新的,我无法找出其他方法来防止NullReferenceException。谢谢你的帮助。。。