【发布时间】:2016-11-29 20:53:27
【问题描述】:
看起来 ServiceStack 不喜欢我在我的请求中使用 DateTime 属性作为参数。我收到“错误请求”消息...在异常中没有其他有用的细节。内部异常显示 html 代码(截断),只是说“类型定义应以“{”开头,期望序列化类型 'ErrorResponse'...”
在我的客户中:
private DateTime _selectedReportDate;
public DateTime SelectedReportDate
{
get { return _selectedReportDate; }
set { SetProperty(ref _selectedReportDate, value); }
}
....
var txResults = await ServiceClient.Instance.GetAsync(new PaymentSummaries()
{
Date = SelectedReportDate
});
服务模式:
[Route("/report/paymentsummaries/{Date}", "GET")]
public class PaymentSummaries : IReturn<List<PaymentSummary>>
{
public DateTime Date { get; set; }
}
服务接口:
[Authenticate]
public class PaymentSummariesService : Service
{
public List<PaymentSummary> Get(PaymentSummaries request)
{
var results = Db.SqlList<Data.OrmLite.SpResponse.ReconcilePaymentSummaryRecord>("EXEC [Report].[ReconcilePaymentsSummary] @date", new { date = request.Date });
return results.ConvertAll(x => x.ConvertTo<PaymentSummary>());
}
}
我收到“错误请求”错误。
当我改变时:
Date = SelectedReportDate
到
Date = new DateTime()
在客户端代码中,它确实有效,并且由于某种原因命中了服务接口代码。
更新
这是请求标头:
获取 http://devservicestack:44345/report/paymentsummaries/2016-11-30T13%3A09%3A15.6795974-05%3A00 HTTP/1.1 Accept-Encoding: gzip,deflate Accept: application/json 用户代理:ServiceStack .NET 客户端 4.54 主机:devservicestack:44345 Cookie:ss-id=F4Bt4aMonhyFQcfqmSmR; ss-pid=K6aJMA17Xw31qIVy1z8V; ss-opt=温度
响应头告诉我:
[HttpException (0x80004005): 有潜在危险的 Request.Path 从客户端检测到值 (:)。]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9827624
System.Web.PipelineStepManager.ValidateHelper(HttpContext 上下文) +53
【问题讨论】:
-
您能创建一个MCVE吗?
-
您传递给的值是!
-
如果捕捉到抛出的异常,ErrorMessage 属性是什么?
-
@DustinHodges 在异常中没有任何用处......只是“错误请求”和一个内部异常说它不喜欢响应不是以“{”开头(它返回一个html 代码而不是 json)...一旦我让 Fiddler 工作,就会看到完整的 html 消息
-
请更新此帖子以包含原始 HTTP 请求/响应标头。如果它返回 HTML 而不是 JSON 响应,它可能是一个 ASP.NET 错误页面,其中包含有关错误的信息。
标签: datetime servicestack