2016-11-29 54 views
3

看起来像ServiceStack不喜欢我在我的请求中使用DateTime属性作为参数。我收到了“错误的请求”消息......没有其他有用的细节。内部异常显示HTML代码(截断),只是说“的类型定义应该开始以‘{’期待系列化型‘错误响应’......”ServiceStack DateTime反序列化问题

在我的客户:

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() 

在客户端代码,它的工作,并且击中出于某种原因,服务接口代码。

更新

这里的请求报头:

GET http://devservicestack:44345/report/paymentsummaries/2016-11-30T13%3A09%3A15.6795974-05%3A00 HTTP/1.1的Accept-Encoding:gzip的,放气接受:应用/ JSON 的User-Agent:ServiceStack .NET客户端4.54主机:devservicestack:44345 Cookie:ss-id = F4Bt4aMonhyFQcfqmSmR; SS-PID = K6aJMA17Xw31qIVy1z8V; SS-OPT =温度

的响应报头告诉我:

[HttpException(0X80004005):从客户端(:)中检测到潜在危险的Request的 值]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig()9827624
System.Web.PipelineStepManager.ValidateHelper(HttpContext的上下文)53

+0

您可以创建一个[MCVE](http://stackoverflow.com/help/mcve)吗? –

+0

你正在传递的价值是! – Aravind

+0

如果捕获抛出的异常,ErrorMessage属性是什么? –

回答

2

当在ASP.Net中托管ServiceStack(而不是自托管)时,ASP.Net使用XSS安全检查。要解决这个问题,我可以允许特定的字符:

<system.web> 
    <httpRuntime targetFramework="4.6.2" requestPathInvalidCharacters="&lt;,>,*,%,&amp;,\,?" /> 
    </system.web> 

(略 “:” 在requestPathInvalidCharacters)

或:

<system.web> 
    <httpRuntime targetFramework="4.6.2" requestValidationMode="2.0" requestPathInvalidCharacters="" /> 
    </system.web> 

禁用请求验证整个应用程序。