2016-11-29 4 views
3

ServiceStackは私の要求でDateTimeプロパティを引数として使用しているようには思えません。私は "Bad Request"メッセージを受け取りました...例外の他の有用な詳細はありません。内部例外はhtmlコード(切り捨て)を示し、そしてちょうど{「型定義で始まるはずです 『』期待してシリアル化された型 『はErrorResponse』 ...」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>()); 
    } 
} 

私は "悪いRequest" を取得していますエラー。

私は変更:

Date = SelectedReportDate 

クライアントコードで
Date = new DateTime() 

に、それは作業を行い、そして何らかの理由でサービスインタフェースコードを打ちます。

アップデートは

ここでリクエストヘッダです:gzipで、受け入れ収縮:アプリケーション/ JSONに のUser-Agentを:ServiceStack .NETクライアント

がGET HTTP/1.1のAccept-エンコーディング http://devservicestack:44345/report/paymentsummaries/2016-11-30T13%3A09%3A15.6795974-05%3A00 4.54ホスト:devservicestack:44345 Cookie:ss-id = F4Bt4aMonhyFQcfqmSmR; ss-pid = K6aJMA17Xw31qIVy1z8V; SS-OPT = TEMP

レスポンスヘッダは私を伝える:

[HttpException(0x80004005が)。潜在的に危険なRequest.Path 値がクライアントから検出された(:)]
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> 

アプリケーション全体の要求の検証を無効にするには、この問題を回避するために、私は特定の文字を許可することができます。