2016-11-29 6 views
3

Es scheint, als ob ServiceStack nicht möchte, dass ich eine DateTime-Eigenschaft als Argument in meiner Anfrage verwende. Ich erhalte die Nachricht "Ungültige Anfrage" ... keine weiteren nützlichen Details in der Ausnahme. Die innere Ausnahme zeigt HTML-Code (abgeschnitten), und sagt nur { „Typdefinitionen mit einem beginnen sollte‚‘erwarten serialisierte Typ‚Error‘...“ServiceStack DateTime Deserialize Problem

In meinem Klienten:

private DateTime _selectedReportDate; 
    public DateTime SelectedReportDate 
    { 
     get { return _selectedReportDate; } 
     set { SetProperty(ref _selectedReportDate, value); } 
    } 
    .... 
    var txResults = await ServiceClient.Instance.GetAsync(new PaymentSummaries() 
    { 
     Date = SelectedReportDate 
    }); 

Service-Modell :

[Route("/report/paymentsummaries/{Date}", "GET")] 
public class PaymentSummaries : IReturn<List<PaymentSummary>> 
{ 
    public DateTime Date { get; set; } 
} 

Service Interface:

[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>()); 
    } 
} 

ich bin ein "Bad Request" bekommen Error.

Wenn ich ändern:

Date = SelectedReportDate 

zu

Date = new DateTime() 

im Client-Code, es funktioniert, und trifft den Service Interface Code aus irgendeinem Grund.

aktualisieren

Hier ist der Request-Header:

GET http://devservicestack:44345/report/paymentsummaries/2016-11-30T13%3A09%3A15.6795974-05%3A00 HTTP/1.1 Accept-Encoding: gzip, deflate Accept: application/json User-Agent: ServiceStack .NET-Client 4.54 Host: devservicestack: 44345 Cookie: ss-id = F4Bt4aMonhyFQcfqmSmR; ss-pid = K6aJMA17Xw31qIVy1z8V; ss-opt = Temp

Der Antwort-Header sagt mir:

[Httpexception (0x80004005). Ein potentiell gefährlicher Request.Path Wert vom Client erkannt wurde (:)]
System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9827624
System.Web.PipelineStepManager.ValidateHelper (Httpcontext Kontext) +53

+0

Könnten Sie bitte ein [MCVE] (http://stackoverflow.com/help/mcve) erstellen? –

+0

Wert, den Sie weitergeben, ist! – Aravind

+0

Wenn Sie die ausgelöste Ausnahme abfangen, was ist die ErrorMessage-Eigenschaft? –

Antwort

2

Beim Hosten von ServiceStack in ASP.Net (im Gegensatz zum Self-Hosting) verwendet ASP.Net XSS-Sicherheitschecks. Um dies zu umgehen, kann ich bestimmte Zeichen zulassen:

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

(weggelassen ":" in requestPathInvalidCharacters)

oder:

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

Anforderungsüberprüfung für die gesamte Anwendung zu deaktivieren.