Typescript 从 POST 和 PATCH 获取请求中删除 Authorization 标头

我使用 C# 构建了一个 API,该 API 使用 JWT 令牌进行授权。在前端,我将这些令牌存储在本地存储中,并在创建请求时获取它们。创建 GET 或 DELETE 请求时,一切正常,并且使用console.log()我可以看到提取选项添加了授权标头。但是,当使用 POST 或 PATCH 方法时,授权标头在将其添加到对象后立即丢失。这是我的请求方法:


const send = async (apiOptions: ApiParams): Promise<FetchReturn> => {

    const accessToken = GetAccessToken()

    const options: ApiOptions = {

        method: apiOptions.method,

        headers: {

            Authorization: `Bearer ${accessToken}`

        }

    }


    console.log(options)


    if (apiOptions.data) {

        options.headers = {

            'Content-Type': 'application/json'

        }

        options.body = JSON.stringify(apiOptions.data)

    }


    const result = await fetch(`${getUrl()}/${apiOptions.path}`, options).then(res => res).catch(err => err)

    if (!result.ok) {

        if (IsExpired()) {

            const refreshResult = await fetch(`${getUrl()}/api/user/refresh`, {method: 'POST', headers:{

                'Content-Type': 'application/json'

            }, body: JSON.stringify(GetRefreshRequest())}).then(res => res).catch(err => err)

            if (refreshResult.ok) {

                Login(JSON.parse(await refreshResult.text()))


                return await send(apiOptions)

            } else if (refreshResult.status === 401) {

                Logout()

                window.location.reload()

                return { code: 0, text: ""}

            }

        }

    }

    const text = await result.text()

    return { code: result.status, text: text }


}


慕妹3242003
浏览 151回答 2
2回答

Qyouu

我想在 POST 的 apiParams 中,您分配了属性“data”,稍后您将拥有完全替换请求标头对象的 if 条件。将其更改为:&nbsp;&nbsp;&nbsp;&nbsp;options.headers['Content-Type']&nbsp;=&nbsp;'application/json';在标头中保留授权

胡子哥哥

第一次检查您的apiOptions.data我认为,当你调用POST/Patch请求时它为空只需放入console.log("...")if 语句,然后尝试解决您的错误
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript