使用C#,如何构造一个复杂的post对象以用于WebClient post? 背景
在我的C#中间层中,我有一个计划任务,每分钟运行一次特定的业务逻辑,然后相应地向iOS和Android设备发送推送通知。我使用来促进推送通知,这意味着,在我的代码中,我只是调用它们的API,然后它们处理对各种设备的实际推送。下面是该代码的外观:使用C#,如何构造一个复杂的post对象以用于WebClient post? 背景,c#,webclient,urbanairship.com,C#,Webclient,Urbanairship.com,在我的C#中间层中,我有一个计划任务,每分钟运行一次特定的业务逻辑,然后相应地向iOS和Android设备发送推送通知。我使用来促进推送通知,这意味着,在我的代码中,我只是调用它们的API,然后它们处理对各种设备的实际推送。下面是该代码的外观: public static void SendNotice(UaMessageModel messages) { var audience = new NameValueCollection { {"ali
public static void SendNotice(UaMessageModel messages)
{
var audience = new NameValueCollection
{
{"alias", string.Join(", ", messages.UserIds)}
};
var notification = new NameValueCollection
{
{"alert", messages.Message}
};
var pushNotice = new NameValueCollection
{
{"audience", new JavaScriptSerializer().Serialize(audience)},
{"notification", new JavaScriptSerializer().Serialize(notification)}
};
//ToDo: remove "validate" from URL when done testing.
Utilities.PostWebRequest("https://go.urbanairship.com/api/push/validate/", "Basic XXXXXXXXX", pushNotice, "application/vnd.urbanairship+json; version=3;");
}
public class UaMessageModel
{
public List<int> UserIds { get; set; }
public string Message { get; set; }
}
提前感谢。NameValueCollection不是字典。JavascriptSerializer不会像您期望的那样序列化它。要获得预期结果,应将NameValueCollection转换为字典
NameValueCollection audience = new NameValueCollection();
Data.Add("alias", "foobar");
Data.Add("alias", "foobar2");
要输出值和键,需要将NameValueCollection转换为字典,如下所示:
Dictionary<string, string> audienceDictionary = audience.AllKeys.ToDictionary(k => k, k => source[k]));
Dictionary audencedictionary=accounter.AllKeys.ToDictionary(k=>k,k=>source[k]);
我们的建议是,您可以在代码中使用字典而不是NameValueCollection:
Dictionary<string, string> audience = new Dictionary<string, string>();
audience.Add("alias", string.Join(", ", messages.UserIds));
Dictionary<string, string> notification = new Dictionary<string, string>();
notification.Add("alert", messages.Message);
Dictionary<string, string> pushNotice = new Dictionary<string, string>();
pushNotice.Add("audience", new JavaScriptSerializer().Serialize(audience));
pushNotice.Add("notification", new JavaScriptSerializer().Serialize(notification));
字典访问群体=新字典();
Add(“别名”,string.Join(“,”,messages.userid));
字典通知=新建字典();
通知。添加(“警报”,messages.Message);
Dictionary pushNotice=新字典();
Add(“受众”,新的JavaScriptSerializer().Serialize(受众));
添加(“通知”,新的JavaScriptSerializer().Serialize(通知));
编辑:
还可以看看这个答案:谢谢你的回答,但据我所知,在使用
webclient
@MatthewPatrickCashatt发布时,你必须使用NameValueCollection,您可以使用Newtonsoft的JsonConvert类或内置的JavascriptSerializer类序列化字典,然后将json字符串转换为字节,并使用webClient.UploadData发布数据,如以下MSDN示例:,但我知道这可能不是您的最佳解决方案。
Dictionary<string, string> audience = new Dictionary<string, string>();
audience.Add("alias", string.Join(", ", messages.UserIds));
Dictionary<string, string> notification = new Dictionary<string, string>();
notification.Add("alert", messages.Message);
Dictionary<string, string> pushNotice = new Dictionary<string, string>();
pushNotice.Add("audience", new JavaScriptSerializer().Serialize(audience));
pushNotice.Add("notification", new JavaScriptSerializer().Serialize(notification));