很奇怪的问题,我将 ServiceStack 用作 Web API,并且我设置了一个标准端点,我应该能够将字符串发布到。但是,在我的 iOS 设备上,我无法发送带有任何标点符号的字符串。有些只会让应用程序完全崩溃,其他的比如问号会切断它后面的所有文本。
这是一个示例,我设置了一个类似的端点
public class FeedbackDTO
{
public bool postResult { get; set; }
}
[Route("/feedback", "OST")]
[Route("/feedback/{uuid}/{content}", "OST")]
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=这样的请求吗?让我们看看” 使用 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
Best Answer-推荐答案 strong>
如果您正在执行 POST,您肯定不想将您发送的内容作为路由的一部分 - url 应该只用于识别资源,而任何内容都应该只在请求中发送 body 。
要做到这一点,只需完全删除不合适的路线:
[Route("/feedback", "OST")]
public class GiveFeedback : IReturn<FeedbackDTO>
{
public string Uuid { get; set; }
public string Content { get; set; }
}
然后,任何未在 Route 上定义的剩余属性都将作为表单数据进行 POST。
关于c# - Xamarin : iOS won't send punctuation in strings to a web endpoint,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/34735551/
|