gpt4 book ai didi

c# - Azure 移动服务客户端将参数传递给 .NET 后端

转载 作者:行者123 更新时间:2023-11-30 12:27:57 25 4
gpt4 key购买 nike

我正在开发一个带有 .NET 后端的 Azure 移动服务和调用此服务的客户端应用程序。

服务在 GetAll 方法上有一些参数。

 public IQueryable<Appointment> GetAllAppointment(DateTime start, DateTime end)
{
// TODO: Handle parameters
return Query();
}

客户端api可以传递参数:

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("start", start.ToString());
parameters.Add("end", end.ToString());

var query = Appointments.WithParameters(parameters);

var results = await query.ToEnumerableAsync();
return results;

永远不会调用服务上的方法。当我删除服务方法上的参数时,正在调用该方法。请求包含查询字符串上的参数。

如何正确处理参数?

最佳答案

您不应使用默认的 ToString 方法将 DateTime 转换为字符串 - 这可能会导致全局化问题。例如,如果您在 en-US 文化(与服务器上的文化相同)中运行此代码,它应该可以正常工作:

var parameters = new Dictionary<string, string>();
var start = new DateTime(2014, 4, 16, 0, 0, 0, DateTimeKind.Utc);
var end = new DateTime(2014, 6, 19, 0, 0, 0, DateTimeKind.Utc);
parameters.Add("start", start.ToString());
parameters.Add("end", end.ToString());
var t = MobileService.GetTable<TodoItem>();
var items = t.WithParameters(parameters).ToListAsync().Result;
Console.WriteLine(string.Join(", ", items));

这将导致以下请求被发送到服务器(添加换行符和 URI 未转义以提高可读性):

GET /tables/TodoItem?
start=4/16/2014 12:00:00 AM
&end=6/19/2014 12:00:00 AM HTTP/1.1

现在,如果您在日期格式为 dd/MM/yyyy 的语言环境中运行它,则请求将按如下方式发送,并且这些值不会映射到 DateTime (没有 16 或 19 月)。

GET /tables/TodoItem?
start=16/4/2014 12:00:00 AM
&end=19/6/2014 12:00:00 AM HTTP/1.1

您可以做的是使用通用格式(例如 ISO 8601),这样无论客户端的文化如何,服务器都将始终以它理解的格式接收日期。下面的代码显示了一个例子。

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("pt-BR");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("pt-BR");
var isoFormat = "yyyy-MM-dd'T'HH:mm:ss.fff'Z'";
var parameters = new Dictionary<string, string>();
var start = new DateTime(2014, 4, 16, 0, 0, 0, DateTimeKind.Utc);
var end = new DateTime(2014, 6, 19, 0, 0, 0, DateTimeKind.Utc);
parameters.Add("start", start.ToString(isoFormat, CultureInfo.InvariantCulture));
parameters.Add("end", end.ToString(isoFormat, CultureInfo.InvariantCulture));
var t = MobileService.GetTable<TodoItem>();
var items = t.WithParameters(parameters).ToListAsync().Result;
Console.WriteLine(string.Join(", ", items));

关于c# - Azure 移动服务客户端将参数传递给 .NET 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23738017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com