0

WebClient クラスを使用して、mvc 3 プロジェクトで応答確認メッセージを送信します。メッセージは、プロジェクトの 1 つのアクション メソッドから別のプロジェクトのアクション メソッドに送信されています。驚くべきことに、データを受信すると、日付パラメーターは 3 時間後です。

たとえば、送信日が「2012-08-14 13:42:50Z」である場合、反対側に「2012-08-14 16:42:50Z」と表示されます。これは私の場合の単純化されたコード サンプルです。

NameValueCollection ack = new NameValueCollection();
ack.Add("RESID", form.RESPONSE.ID.ToString());
ack.Add("A_DateTime", DateTime.Now.ToString("u")); //2012-08-14 13:42:50Z

using (var client = new WebClient())
{
    client.Encoding = System.Text.Encoding.UTF8;
    var result = client.UploadValues("http://localhost:11578/HPM/ResponseAck", ack);
}



//HPM Controller:
ResponseAck(HttpPostResponseAckMessage response)
{
    //Here response.Date vale is 2012-08-14 16:42:50Z  ???
}

それは、いくつかの文化固有の問題の原因を変更する、卑劣な小さな連載モンスターについてのようです。しかし、本当の原因がわからないので解決策を。

編集:

public class HttpPostResponseAckMessage
{
    public int RESID { get; set; }

    public DateTime A_DateTime { get; set; }
}
4

2 に答える 2

1

現在のスレッドのカルチャを変更するか、すべての日付を UTC などの固定形式に変換して処理する必要があります。次のコードを使用して、スレッドの現在のカルチャを変更できます。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-EN");
于 2012-08-14T11:12:12.227 に答える
0

わかりました、mvcモデルバインダーがフォーマットされた日時を解析することを期待していると思います。

"u" 形式のモデルでは、バインダーは日時を UTC と見なします。

したがって、私の解決策は、プロパティ A_DateTime のタイプを文字列に変更し、内部で解析することです。

これが私のような他の誰かに役立つことを願っています。皆さんありがとう。

于 2012-08-14T11:55:44.780 に答える