【发布时间】:2019-07-11 02:28:33
【问题描述】:
不知何故模型没有反序列化,但如果将 SlackResponse 类更改为字符串,那么里面将是原始 json,因为它可能有来自 JSON.Net 的设置,她通常会反序列化什么?
输入数据
payload={\"type\":\"message_action\",\"token\":\"000\",\"action_ts\":\"000\",\"team\":{\ "id\":\"000\",\"域\":\"000\"},\"用户\":{\"id\":\"000\",\"名称\":\ "000\"},\"channel\":{\"id\":\"000\",\"name\":\"000\"},\"callback_id\":\"rm_create\", \"trigger_id\":\"000\",\"message_ts\":\"000\",\"message\":{\"bot_id\":\"000\",\"type\":\ "消息\",\"文本\":\"000\",\"用户\":\"000\",\"ts\":\"000\",\"团队\":\"000 \"},\"response_url\":\"000\"}
在 C# 中创建的类
public partial class SlackResponse
{
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("token")]
public string Token { get; set; }
[JsonProperty("action_ts")]
public string ActionTs { get; set; }
[JsonProperty("team")]
public Team Team { get; set; }
[JsonProperty("user")]
public Channel User { get; set; }
[JsonProperty("channel")]
public Channel Channel { get; set; }
[JsonProperty("callback_id")]
public string CallbackId { get; set; }
[JsonProperty("trigger_id")]
public string TriggerId { get; set; }
[JsonProperty("message_ts")]
public string MessageTs { get; set; }
[JsonProperty("message")]
public Message Message { get; set; }
[JsonProperty("response_url")]
public Uri ResponseUrl { get; set; }
}
public partial class Channel
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
public partial class Message
{
[JsonProperty("client_msg_id")]
public Guid ClientMsgId { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("text")]
public string Text { get; set; }
[JsonProperty("user")]
public string User { get; set; }
[JsonProperty("ts")]
public string Ts { get; set; }
[JsonProperty("team")]
public string Team { get; set; }
}
public partial class Team
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("domain")]
public string Domain { get; set; }
}
和控制器方法
[HttpPost]
public async void Get([FromForm(Name = "payload")] SlackResponse payload)
{
}
【问题讨论】:
-
@John 如果使用字符串作为方法的输入参数,那么字符串将为:
payload={\"type\":\"message_action\",\"token\":\"000\",\"action_ts\":\"000\",\"team\":{\"id\":\"000\",\"domain\":\"000\"},\"user\":{\"id\":\"000\",\"name\":\"000\"},\"channel\":{\"id\":\"000\",\"name\":\"000\"},\"callback_id\":\"rm_create\",\"trigger_id\":\"000\",\"message_ts\":\"000\",\"message\":{\"bot_id\":\"000\",\"type\":\"message\",\"text\":\"000\",\"user\":\"000\",\"ts\":\"000\",\"team\":\"000\"},\"response_url\":\"000\"} -
字符串中包含文本
payload=? -
哎呀。复制的时候忘记删除,不是字符串不包含
payload= -
那么您可能需要
[FromBody],而不是[FromForm],因为您接收的是 JSON 而不是表单编码的数据。 -
这个请求是否来自 Slack 的 API?如果是这样,那就太奇怪了。他们对 JSON 进行了编码,然后将其作为表单字段提供给表单帖子。鉴于您收到的实际数据,我倾向于认为您的解决方案是最好的。
标签: c# asp.net-web-api slack-api