首页 > 解决方案 > Typescript 从 POST 和 PATCH 获取请求中删除授权标头

问题描述

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

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 }

}

标签: javascriptc#typescript

解决方案


我想在 POST 的 apiParams 中,您分配了属性“数据”,然后您有完全替换请求标头对象的 if 条件。将其更改为:

    options.headers['Content-Type'] = 'application/json';

在标头中保留授权


推荐阅读