【问题标题】:ServiceStack UK Date Binding on HTTP POSTHTTP POST 上的 ServiceStack UK 日期绑定
【发布时间】:2014-03-07 23:11:43
【问题描述】:

我正在使用带有 ServiceStack.Razor 渲染的单声道自托管 servicestack 应用程序。在应用程序中,用户在表单中输入英国日期 (dd/mm/yyyy),但在 HTTP POST 上将其转换为美国日期 (mm/dd/yyyy)。

在普通的 MVC 应用程序中,我会使用模型绑定来执行此操作,如下所示 ASP.NET MVC3: Force controller to use date format dd/mm/yyyy

您如何在 ServiceStack 中执行此操作,因为我找不到任何相关信息。

【问题讨论】:

  • 如果您知道它将如何交付,您就不能在您的服务中将其转换回您想要的格式吗?另外,请查看github.com/ServiceStack/ServiceStack.Text/blob/master/tests/…
  • 它不起作用,因为当一天超过 12 天时我会得到无效的日期,因为它会认为美国日期中的月份无效。我可以使用字符串,但这会破坏使用绑定的意义。

标签: c# servicestack servicestack-razor


【解决方案1】:

你可以使用custom serializers/deserializers来全局控制DateTime值的序列化和反序列化:

在您的 AppHost 中:

using ServiceStack.Text;

JsConfig<DateTime>.SerializeFn = SerializeAsUKDate;
// Also, if you need to support nullable DateTimes:
JsConfig<DateTime?>.SerializeFn = SerializeAsNullableUKDate;

public static string SerializeAsUKDate(DateTime value)
{
    // or whatever you prefer to specify the format/culture
    return value.ToString("dd/MM/yyyy");
}

public static string SerializeAsNullableUKDate(DateTime? value)
{
    return value.HasValue ? SerializeAsUKDate(value.Value) : null;
}

您可能需要也可能不需要指定DeSerializeFn 以确保正确解析日期。 ServiceStack.Text 日期反序列化器非常强大。

JsConfig<DateTime>.DeSerializeFn = DeSerializeAsUKDate;

public static DateTime DeSerializeAsUKDate(string value)
{
    // date parsing logic here
    // ServiceStack.Text.Common.DateTimeSerializer has some helper methods you may want to leverage
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多