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

Xamarin:iOS赢得';t将字符串中的标点符号发送到web端点

如果你正在进行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编码。