2

请注意,我的问题与此问题类似,但由于我不知道如何在已接受的答案中添加评论以要求澄清,因此我必须创建一个新问题。

我有一个休息服务,类似这样:

namespace My.API
{
    [Route("/event/{Id}", Verbs = "POST")]
    public class EventRequest
    {
        public int Id { get; set; }
        public string Content { get; set; }
    }

    public class EventService : Service
    {
        public object Post(EventRequest request)
        {
            // Do something with request.Content
        }
    }
}

当我使用以下表单数据发出发布请求时:

Content=%22this+is+a+%22+test

request.Content 包含

this is a " tes

请注意,缺少第一个双引号,并且缺少测试末尾的 t。

现在,上面链接的另一个问题中接受的答案说我们需要对字符串进行编码,但我想知道是否有任何方法可以改变它的行为。我正在尝试创建一个公共 api,如果 api 的客户端必须以某种方式对字符串进行编码,那么我认为这会导致错误。他们应该能够提供一个正常的字符串。

基本上,下面的 jQuery ajax 调用应该可以工作:

$.ajax({
  url: "api/event/" + id,
  type: "POST",
  data: {Content : content}
});

其中 content 是原始/未编码的字符串,jQuery 将在传递给服务之前对其执行表单 url 编码。该服务应该只返回原始的原始字符串。

4

2 回答 2

0

网络规则说您必须对字符串进行编码以确保它们安全通过。如果您不编码,则各方无法保证如何读取/写入数据。

我认为如果需要对字符串进行编码,期望用户需要对字符串进行编码是完全合理的。

于 2013-05-28T20:14:25.893 回答
0

默认情况下,ServiceStack 使用内置的JSV Format解码 QueryString/FormData 参数,这允许 ServiceStack 反序列化 QueryString 上的嵌套复杂类型。

问题在于它"this is a " test不是有效的 JSV 字符串,因为它包含未转义的保留字符。

为了解决这个问题,我们现在跳过反序列化字符串属性的 JSV 值,如本次提交中所示,该提交将在 ServiceStack v3.9.48+ 的下一个版本中提供。

于 2013-05-28T21:10:44.033 回答