Не получается обработать запрос с FormContent в Asp.Net
Я пытаюсь обработать запрос Slack actions (информация по апи здесь https://api.slack.com/interactivity/handling#payloads)
Слак возвращает Form content с ключом payload и значениемjson.
Скриншот с ngrot:
Я пытаюсь обработать запрос таким образом, есть метод
[
HttpPost,
Consumes("application/x-www-form-urlencoded"),
Produces("application/json")
]
public JsonResult Post([FromForm] SlashActionPayload data);
где модель
public sealed class SlashActionPayload
{
[JsonProperty("payload")]
public SlashActionInnerPayload InnerPayload { get; set; }
}
public sealed class SlashActionInnerPayload
{
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("token")]
public string Token { get; set; }
[JsonProperty("actions")]
public Action[] Actions { get; set; }
}
public sealed class Action
{
[JsonProperty("action_id")]
public string ActionId { get; set; }
[JsonProperty("block_id")]
public string BlockId { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
но SlashActionInnerPayload в SlashActionPayload все время null :((((.
в чем моя ошибка?
p.s. все поля в модели существующие, вот полное значение json ключа payload
{"type":"block_actions","user":{"id":"hidden_id_for_overflow","username":"test_username","name":"test_name","team_id":"hidden_team_id"},"api_app_id":"123123","token":"asdqwgqwg","container":{"type":"message","message_ts":"1634137424.008100","channel_id":"1233123123","is_ephemeral":true},"trigger_id":"2593661540438.1137726068096.f0ecf0f4e9b0d0bf15796e4a519a21f8","team":{"id":"hidden_id_for_overflow","domain":"slack-bots-testing"},"enterprise":null,"is_enterprise_install":false,"channel":{"id":"123123123","name":"random"},"state":{"values":{}},"response_url":"https:\/\/hooks.slack.com\/actions\/hidden_id_for_overflow\/123\/TlMw2CdjHSzZfRLIgZeKrPS3","actions":[{"action_id":"Send","block_id":"lqdK","text":{"type":"plain_text","text":"Send","emoji":true},"value":"https:\/\/cdn.betterttv.net\/emote\/5f50677a6084af6c17196c77\/3x","style":"primary","type":"button","action_ts":"1634138593.509431"}]}
Ответы (1 шт):
Автор решения: bond1k
→ Ссылка
Решил таким вариантом:
[
HttpPost,
Consumes("application/x-www-form-urlencoded")
]
public JsonResult Post([FromForm] IFormCollection collection)
{
var json = collection["payload"];
var payload = JsonConvert.DeserializeObject<SlashActionInnerPayload>(json);
