Xamarin:iOS赢得';t将字符串中的标点符号发送到web端点
本文关键字:标点符号 端点 web 字符串 赢得 iOS Xamarin | 更新日期: 2023-09-27 18:30:04
非常奇怪的问题,我使用ServiceStack作为web API,并且我设置了一个标准的端点,我应该可以将字符串发布到该端点。但是,在我的iOS设备上,我不能发送带任何标点符号的字符串。有些只会让应用程序完全崩溃,其他的,比如问号,会切断之后的所有文本。
这里有一个例子,我设置了一个类似于的端点
public class FeedbackDTO
{
public bool postResult { get; set; }
}
[Route("/feedback", "POST")]
[Route("/feedback/{uuid}/{content}", "POST")]
public class GiveFeedback : IReturn<FeedbackDTO>
{
public string Uuid { get; set; }
public string Content { get; set; }
}
因此,如果我发布到端点,我会像一样将其保存到数据库中
await Commons.MobileService.GetTable<Feedback>().InsertAsync(new Feedback
{
Uuid = uuid,
Content = content,
Date = DateTimeOffset.UtcNow
});
return true;
现在,只使用Postman这样的基本客户端来发出Http请求,我就可以发送一个看起来像'.../api/feedback?Uuid=something&Content=Will this work? Lets see"
的请求。使用Postman或其他客户端,这会很好,但在我的Xamarin代码中,当我像一样发布它时
return (await JsonWebService.PostAsync(new GiveFeedback
{
Uuid = myUuid,
Content = "Will this work? Lets see"
})).postResult;
?
之后的所有内容都将被切断,因此唯一保存到数据库的是Will this work
。这是一个非常奇怪的问题,因为普通的http请求客户端会发送整个字符串,但我在Xamarin中使用的特定JSON海报似乎切断了特定标点符号后的所有内容。
你知道为什么会发生这种情况吗?
如果有帮助的话,我在Xamarin中使用的客户端是ServiceStack.JsonServiceClient
如果你正在进行POST,你肯定不想将发送的内容作为路由的一部分-url只能用于识别资源,而任何内容都只能在请求正文中发送。
要做到这一点,只需完全删除不合适的路线:
[Route("/feedback", "POST")]
public class GiveFeedback : IReturn<FeedbackDTO>
{
public string Uuid { get; set; }
public string Content { get; set; }
}
然后,路线上未定义的任何剩余属性都将作为表单数据张贴。
即使是POST方法,Route也包含uuid和内容。因此,我相信uuid和内容应该是url编码的。
[Route("/feedback", "POST")]
[Route("/feedback/{uuid}/{content}", "POST")] // I'm talking about this
尝试对这两个字段进行url编码。
它正在与邮递员合作,因为它必须为您处理url编码。