You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function对接Slack API互联与快捷方式时出现500错误

问题排查与修复方案

错误原因分析

你遇到的Unexpected character encountered while parsing value: p...错误,核心原因是Slack发送的请求体不是纯JSON格式,而是application/x-www-form-urlencoded类型的表单数据,内容开头为payload=,直接对整个请求体做JSON反序列化自然会失败(开头的'p'不是JSON合法起始字符)。

排查步骤

  1. 确认请求实际内容:在函数中添加日志,输出请求的Content-Type和原始请求体,明确Slack发送的数据格式:
log.LogInformation($"Content-Type: {req.ContentType}");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation($"Raw Request Body: {requestBody}");

运行后查看日志,你会发现请求体类似payload={"type":"shortcut","token":"xxx",...},这是Slack快捷方式/互联请求的标准格式。

  1. 修正端点URL:你的函数URL结尾带有多余的?,需要删除,正确的端点URL应为:
    https://<namehere>.azurewebsites.net/api/events/slack

代码修复方案

针对Slack的表单格式请求,需要先解析表单数据,取出payload字段后再做JSON反序列化:

[FunctionName("abc123")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "events/slack")] HttpRequest req,
ILogger log)
{
    log.LogInformation($"Content-Type: {req.ContentType}");
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    log.LogInformation($"Raw Request Body: {requestBody}");

    dynamic data = null;
    // 处理Slack的form-urlencoded格式请求
    if (req.ContentType?.Contains("application/x-www-form-urlencoded") == true)
    {
        var formData = await req.ReadFormAsync();
        var payload = formData["payload"];
        if (!string.IsNullOrEmpty(payload))
        {
            data = JsonConvert.DeserializeObject(payload);
            log.LogInformation($"Parsed Payload Type: {data.type}");
        }
    }
    // 兼容纯JSON请求(如Slack事件订阅场景)
    else if (req.ContentType?.Contains("application/json") == true)
    {
        data = JsonConvert.DeserializeObject(requestBody);
    }

    return new OkObjectResult("cool");
}

后续注意事项

修复后测试功能正常的话,后续需要添加Slack请求签名验证,确保请求确实来自Slack,避免恶意请求。

内容的提问来源于stack exchange,提问作者mharre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:22:34