-2

如何允许 null in Context.Request

context.Response.Write(retrieveList(context.Request["SalCode"].ToString(null), context.Request["groupKeyword"].ToString(), context.Request["text"].ToString()));
4

2 回答 2

2

首先,Request["..."]已经返回 a string,因此无需调用ToString()它,因此在此阶段无需担心它是否返回null(即,如果请求中不存在密钥)。

因此,您可以调用例如

retrieveList(
    context.Request["SalCode"],
    context.Request["groupKeyword"],
    context.Request["text"]);

不用担心这三个中的任何一个是否为空。

然后,如果任何输入为空,您可以更改retrieveList以正确响应。例如,您可以返回null:

private string /*or whatever*/ retrieveList(
    string salCode, string groupKeyword, string text)
{
    if (String.IsNullOrEmpty(salCode) ||
        String.IsNullOrEmpty(groupKeyword) ||
        String.IsNullOrEmpty(text))
    {
        return null;
    }
    ...
}

然后,请注意,Response.Write不管你是否给它 a null,它什么都不写,所以你可以Write像上面那样保持调用。

或者,例如,您可以检查返回值并写一条消息,如果它是null

var list = retrieveList(
    context.Request["SalCode"],
    context.Request["groupKeyword"],
    context.Request["text"]));
if (!String.IsNullOrEmpty(list))
{
    context.Response.Write(list);
}
else
{
    context.Response.Write("Missing request parameter.");
}
于 2012-10-11T07:28:26.690 回答
0

你没有指定任何东西!请添加信息,您甚至没有指定发生此问题的环境、类或一般上下文。我们也不知道retrieveList() 的签名是什么!这让我们很难为您提供帮助!你有多想回答这个问题,我的一位同事曾经面临过:“这个废话行不通!” ? (是的,这甚至不是一个问题,而是发生在现实生活中的支持情况下!)

我注意到的一件事是您使用 * T *oString() 而不是 * t *oString(),我认为这是一个错字。(已编辑,因为很明显这是 C#)另外,我不知道 .toString(null) 是什么意思。您想告诉我们该语句导致 NullPointerException 吗?在这种情况下,您本可以为我们付出更多努力来理解您的问题,例如通过写下来...

顺便说一句,如果是这样的话,我会说,这将解决你的问题:

Object salCode = context.Request["SalCode"];
context.Response.Write(retrieveList(salCode==null?"":salCode.ToString(), context.Request["groupKeyword"].ToString(), context.Request["text"].ToString()));

编辑我认为(但无法测试)如果 null 是问题,这将解决它。但是,如果底层代码在指定空字符串的情况下无法正常工作,则应该像这样在retrieveList() 中检查(粘贴自引用的帖子):

private string retrieveList(string SalCode, string groupKeyword, string text)
{
    SqlConnection _sqlCon = default(SqlConnection);
    SqlCommand _sqlCom = default(SqlCommand);
    SqlDataReader _sqlReader = default(SqlDataReader);
    StringBuilder _sb = new StringBuilder();
    List<TokenInputJSON> _out = null;

    try
    {
        _sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SalesianBlastConnectionString"].ConnectionString);
        _sqlCom = new SqlCommand("getTokenInput", _sqlCon);
        _sqlCom.CommandType = CommandType.StoredProcedure;
        _sqlCon.Open();

        //This is the edited part
        if(SalCode==null || SalCode.Equals("")) {
            _sqlCom.Parameters.Add(new SqlParameter("@salCode", SqlDbType.VarChar, 4)).Value = SalCode;
        }
        //... continue with the other parts

快速检查:我刚刚有了一个想法:在调用retrieveList 时使用一个常量值来确定这是否是问题所在:

context.Response.Write(retrieveList("enterAValidSalCodeHere", context.Request["groupKeyword"].ToString(), context.Request["text"].ToString()));
于 2012-10-11T06:33:25.557 回答