servicestack,Asp.net Mvc 3,Exception Handling,servicestack" /> servicestack,Asp.net Mvc 3,Exception Handling,servicestack" />

Asp.net mvc 3 ServiceStack:如何在写入响应之前捕获错误

Asp.net mvc 3 ServiceStack:如何在写入响应之前捕获错误,asp.net-mvc-3,exception-handling,servicestack,Asp.net Mvc 3,Exception Handling,servicestack,我使用ServiceStack开发了一个Rest服务。 我的模型包含DateTime属性,问题从它开始。如果客户端将日期值的格式设置为字符串,ServiceStack将引发异常“字符串未被识别为有效的DateTime” 堆栈跟踪: [格式异常:字符串未被识别为有效的日期时间。] System.DateTime.Parse(字符串s,IFormatProvider提供程序,DateTimeStyles样式)+6364458 C:\src\ServiceStack.Text\src\ServiceS

我使用ServiceStack开发了一个Rest服务。 我的模型包含DateTime属性,问题从它开始。如果客户端将日期值的格式设置为字符串,ServiceStack将引发异常“字符串未被识别为有效的DateTime”

堆栈跟踪:
[格式异常:字符串未被识别为有效的日期时间。]
System.DateTime.Parse(字符串s,IFormatProvider提供程序,DateTimeStyles样式)+6364458
C:\src\ServiceStack.Text\src\ServiceStack.Text\Common.DeserializeBuiltin`1.b\u\b(字符串值)中的ServiceStack.Text.Common.DeserializeBuiltin`1.b(字符串值):58
ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(对象实例,IDictionary`2 keyValuePairs)在C:\src\ServiceStack\src\ServiceStack.Common\ServiceModel\Serialization\StringMapTypeDeserializer.cs:79中
[SerializationException:KeyValueDataContractDeserializer:转换为类型时出错:字符串未被识别为有效的日期时间。]
ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(对象实例,IDictionary`2个keyValuePairs)在C:\src\ServiceStack\src\ServiceStack.Common\ServiceModel\Serialization\StringMapTypeDeserializer.cs:95中
C:\src\ServiceStack\src\ServiceStack\ServiceHost\ServiceHost\RestPath.CreateRequest中的ServiceStack.ServiceHost.RestPath.CreateRequest(字符串pathInfo,字典'2 queryStringAndFormData,对象fromInstance)
C:\src\ServiceStack\src\ServiceStack\WebHost.Endpoints.RestHandler.GetRequest(IHttpRequest httpReq,IRestPath restPath)中的ServiceStack.WebHost.Endpoints.RestHandler.GetRequest
C:\src\ServiceStack\src\ServiceStack\ServiceStack\WebHost.Endpoints\RestHandler.ProcessRequest(IHttpRequest httpReq、IHttpResponse httpRes、String operationName)中的ServiceStack.WebHost.RestHandler.ProcessRequest(IHttpRequest httpRes、String operationName):80
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+625
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+270
我知道这是一个错误,我知道它必须被捕获,但我想用我的错误代码和错误描述(人性化)来实现它

任何关于如何在异常写入自身响应(DebeugMode=true)或服务向客户端触发异常之前捕获异常的建议都会非常有用


Thnx

将自定义请求绑定器(或更高级的选项是在DTO上实现IRequiresRequestStream)添加到旁路ServiceStack的反序列化中


有关这方面的更多信息,请参见

Thnx,以供您回复。它工作正常。当我的服务类从ServiceBase或RestServiceBase继承时,只需重写HandleException虚拟方法,就可以非常方便地实现类似的功能。
Stack Trace: 


[FormatException: String was not recognized as a valid DateTime.]
   System.DateTime.Parse(String s, IFormatProvider provider, DateTimeStyles styles) +6364458
   ServiceStack.Text.Common.DeserializeBuiltin`1.<GetParseFn>b__b(String value) in C:\src\ServiceStack.Text\src\ServiceStack.Text\Common\DeserializeBuiltin.cs:58
   ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary`2 keyValuePairs) in C:\src\ServiceStack\src\ServiceStack.Common\ServiceModel\Serialization\StringMapTypeDeserializer.cs:79

[SerializationException: KeyValueDataContractDeserializer: Error converting to type: String was not recognized as a valid DateTime.]
   ServiceStack.ServiceModel.Serialization.StringMapTypeDeserializer.PopulateFromMap(Object instance, IDictionary`2 keyValuePairs) in C:\src\ServiceStack\src\ServiceStack.Common\ServiceModel\Serialization\StringMapTypeDeserializer.cs:95
   ServiceStack.ServiceHost.RestPath.CreateRequest(String pathInfo, Dictionary`2 queryStringAndFormData, Object fromInstance) in C:\src\ServiceStack\src\ServiceStack\ServiceHost\RestPath.cs:319
   ServiceStack.WebHost.Endpoints.RestHandler.GetRequest(IHttpRequest httpReq, IRestPath restPath) in C:\src\ServiceStack\src\ServiceStack\WebHost.Endpoints\RestHandler.cs:104
   ServiceStack.WebHost.Endpoints.RestHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName) in C:\src\ServiceStack\src\ServiceStack\WebHost.Endpoints\RestHandler.cs:80
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +625
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270