2

私が尋ねる理由は、私たちのプロダクションボックスでのみ発生した本当に奇妙なバグを見つけたからです。ここに小さな例があります:

protected void Page_Load(object sender, EventArgs e)
{
    ...
    var form = Request.Form;
    string name = form.GetValueOrDefaultIfKeyExists("firstName");
    string email = form.GetValueOrDefaultIfKeyExists("emailAddress");
    ... 
}

プロダクションボックスでは、フォームに「firstName」と「emailAddress」のキーが含まれていても、このコードが実行された後、名前と電子メールはString.Emptyになります。これGetValueOrDefaultIfKeyExistsはカスタム拡張メソッドであり、次のように実装されます。

public static Boolean HasKey(this NameValueCollection collection, String key)
{
    return collection.AllKeys.Any(x => x.Equals(key));
}

public static String GetValueOrDefaultIfKeyExists(this NameValueCollection collection, String key)
{
    return GetValueOrDefaultIfKeyExists(collection, key, String.Empty);
}

public static String GetValueOrDefaultIfKeyExists(this NameValueCollection collection, String key, String defaultValue)
{
    return collection.HasKey(key) ? collection[key].Trim() : defaultValue;
}

問題は、HasKey()プロダクションボックスのメソッドにありました。これは、この実装に変更するまで、本番ボックスでfalseを返しました。

public static Boolean HasKey(this NameValueCollection collection, String key)
{
    return collection.AllKeys.Any(x => x.Equals(key, StringComparison.OrdinalIgnoreCase));
}

誰かが行動の違いについて考えられる説明がありますか?開発ボックスと本番ボックスの両方で、IIS6.0とasp.netv2.0を使用しています。ここで他に何を見るべきかよくわかりません...

編集:ローカルホストでページを実行し、Request.Formキー/値をループするだけで変数をページにダンプすると、次のような出力が得られます。

__VIEWSTATE = /wEPDwUJNTE2ODkwODQ2ZGS2XnJpbO5ngrJFByrGtuNn3PkU5A==

LandingPage = ~/Newsletter/thank-you.aspx

SourceDesc = 676

emailAddress = bntest222@test.com

confirmEmailAddress = bntest222@test.com

firstName = mtest

postalCode = 23320

プロダクションボックスで実行された同じコードはこれをダンプします:

__viewstate = /wEPDwUJNTE2ODkwODQ2ZGSWeuNU+/5eQHvpsMc66Ayh4lEdWQ==

confirmemailaddress = mtest332@test.com

emailaddress = mtest332@test.com

firstname = mtest

landingpage = ~/Newsletter/thank-you.aspx

postalcode = 23320

キーが小文字になっているようです...なぜですか?

4

1 に答える 1

0

あなたの質問に正確に答えるわけではありませんが、FxCop/コード分析は、明示的StringComparisonまたはフォーマットプロバイダーを指定していないが、そうすべきであるプロジェクト内のコードについて警告します。

于 2012-11-13T20:11:40.757 に答える