请注意,我的问题类似于this question,但由于我无法弄清楚如何在接受的答案中添加评论以便澄清,我必须创建一个新问题。
我有休息服务,类似于:
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是raw / unncoded字符串,jQuery将在传递给服务之前执行url编码。该服务应该只返回原始的原始字符串。
答案 0 :(得分:0)
网络规则说您必须对字符串进行编码以确保它们安全通过。如果您不编码,那么所有各方都不能保证如何读/写数据。
我认为,如果需要对字符串进行编码,那么期望用户需要对其进行编码是完全合理的。
答案 1 :(得分:0)
默认情况下,ServiceStack使用内置的JSV Format解码QueryString / FormData参数,这使得ServiceStack可以对QueryString上的嵌套复杂类型进行反序列化。
问题是"this is a " test
不是有效的JSV字符串,因为它包含未转义的保留字符。
要解决此问题,我们现在跳过将字符串属性的JSV值反序列化为seen in this commit,这将在下一版ServiceStack v3.9.48 +中提供。