如何从fetch api中获取实际错误

时间:2016-06-10 17:28:25

标签: asp.net-core-mvc fetch-api

我正在进行fetch api调用,但是如果出现500错误,则以下中间件启动并在响应正文中发回一个json对象。

app.Use(async (context, next) =>
        {
            try
            {
                await next();
            }
            catch (Exception ex)
            {
                if (context.Response.HasStarted)
                {
                    throw;
                }
                context.Response.StatusCode = 500;
                context.Response.ContentType = "application/json";
                var json = JToken.FromObject(ex);
                await context.Response.WriteAsync(json.ToString());
            }
        });

在客户端,我有以下代码

 return fetch(url, content)
    .then(function(res) {
        if (!res.ok) {
            console.log(res, res.json())
            throw Error(res.statusText);
          }
        return res;
      })
    .then(res => res.json())
    .catch(e => console.log('Error fetching accounts:', e))

我无法使用错误信息访问json。我怎么能这样做?

遵循正确答案后的工作代码

return fetch(url, content)
       .then(function(response) {
           if (!response.ok) {
              return response.json()
                   .then(function(obj) {
                       throw Error(obj.ErrorMessage)
                   })
           } 
           else {
              return response.json()
                               .then(json => {
                                   /*further processing */
                               })
           }
       }).catch(/* work with the error */)

1 个答案:

答案 0 :(得分:2)

json对象的Response函数返回Promise,而不是实际解析的值。

res.json()
.then(function(object) {
  // Here you have the parsed JSON object.
  console.log(object);
});