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

您需要将整个值括在引号中并转义您的内部引号。这是因为 querystring 参数需要 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 回答