4

サービス スタック アプリケーションがあります。テスト サービスは単純なリクエストを受け取りますが、受け取ったリクエストの値が元のリクエストと一致しないことがわかりました。

私は送ります:http://localhost/testapp/test?value=%22test%20data%22%20%3C12345%3E

しかし、コードの出力: テスト データ" 12345>

最初の二重引用符が欠落しており、左側の山括弧が欠落していることに注意してください。

アプリケーションが最初の「」と「<」をドロップする理由はありますか?それはある種の XSS 保護の一部ですか?

私のコード:

public class TestService : RestServiceBase<RequestDto>, IRestService<RequestDto>
{
    public override object OnGet(RequestDto request)
    {
       return request.Value;
    }
}

public class RequestDto
{
    public string Value { get; set; }
}

最初にサービススタックが「<」でリクエストを受信できるようにします。使用するアプリケーション web.config を切り替える必要がありました: requestValidationMode="2.0"

4

2 に答える 2

2

これは、servicestack の今後のリリースでも修正されています。

詳細については、このgithub の問題を参照してください。

于 2013-05-28T21:36:18.713 に答える
1

値全体を引用符で囲み、内側の引用符をエスケープする必要があります。これは、クエリ文字列パラメーターが ServiceStack JSV 形式を想定しているためです。つまり:

次のいずれかの文字を含む文字列: []{}," は、値が二重引用符で囲まれた CSV スタイルのエスケープを使用してエスケープされます。

詳細については、 http://www.servicestack.net/docs/text-serializers/json-csv-jsv-serializersを参照してください。

次のように値を渡す必要があります

?Value="""test data"" <12345>"

また

?Value=%22%22%22test%20data%22%22%20%3C12345%3E%22

これは ' に逆シリアル化されます

"test data" <12345>
于 2013-01-08T16:44:51.757 に答える