获取 Azure 函数时收到 500 状态代码

Posted

技术标签:

【中文标题】获取 Azure 函数时收到 500 状态代码【英文标题】:I receive 500 status code when I GET an Azure Function 【发布时间】:2018-04-25 11:00:24 【问题描述】:

我正在尝试向使用 NReco htmlToImageConverter 的 Azure 函数 (v1) 发出 Get 请求,但由于某种原因,我得到了 500 状态代码和以下消息

没有 MediaTypeFormatter 可用于从媒体类型为“application/octet-stream”的内容中读取“Object”类型的对象。

编辑:我认为问题不在于here 所描述的内容

我将空函数 V1 发布到 Azure,但它不起作用。

 [FunctionName("Function1")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    
        log.Info("C# HTTP trigger function processed a request.");

        // parse query parameter
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();

        // Set name to query string or body data
        name = name ?? data?.name;

        return name == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
            : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
    

我不知道它是否相关,但当我发布时,我得到以下对话框(我目前回答否)

【问题讨论】:

No MediaTypeFormatter is available to read an object of type 'String' from content with media type 'text/plain'的可能重复 显然您看到的弹出窗口仍然是open issue。那里也提到了一个解决方案。关于你得到的异常,我真的无能为力。 【参考方案1】:

在 HTTP 请求中你需要将 Content-Type 设置为:

contentType: 'application/json; charset=utf-8'.

Azure 主机上的 Functions 版本与本地版本不匹配。

您的本地函数运行时好像是v1,但是Portal上的函数可能是“测试版”,所以它们的版本不匹配。

因此,您可以在门户上创建一个新的 Azure Function,其默认运行时版本为“~1”。在 Function app settings 中检查门户​​上的运行时,如下所示:

然后将你的本地函数发布到 Azure,它就可以正常工作了。

【讨论】:

以上是关于获取 Azure 函数时收到 500 状态代码的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure 函数获取 401 时,Azure 逻辑应用停止执行

Spotify web api 在获取播放列表请求时返回状态 500

Azure DevOps Artifact Feed 在 Visual Studio 中给出 500 错误

当我在 azure 上创建函数 App 时,我得到 microsoft.web/serverFarms 的 429 状态代码

收到错误消息;加载资源失败:服务器响应状态为 500

收到错误消息;无法加载资源:服务器响应状态为500