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

KendoReact Data Grid中useODataDataSource Hook传递Bearer认证令牌的实现问题

在Kendo React useODataDataSource中添加Bearer认证令牌请求头的正确方式

我之前也碰到过一模一样的问题——你在transport.read里直接加headers属性不生效,是因为这个配置项并不在useODataDataSource的read选项支持列表里。下面给你两种经过验证的可行方案:

方案1:全局配置所有请求的请求头

如果你的所有数据请求(包括查询、删除等)都需要携带同一个Bearer令牌,直接在transport层级配置headers即可,这是官方文档明确支持的配置:

const dataSource = useODataDataSource({
    defaultSkip: 0,
    take: 10,
    transport: {
        // 全局设置所有请求的Authorization头
        headers: { 'Authorization': `Bearer ${token}` },
        read: {
            url: baseUrl + '/' + name,
        },
        delete: {
            url: (dataItem) => `${baseUrl}/${name}(${getter('ID')(dataItem)})`
        }
    },
    schema: {
        model: { id: 'ID' }
    }
});

方案2:针对单个请求动态设置请求头

如果只有特定请求需要加令牌,或者需要动态调整头信息,可以在对应的请求配置里使用beforeSend函数——它会在请求发送前触发,允许你直接修改XMLHttpRequest对象的请求头:

const dataSource = useODataDataSource({
    defaultSkip: 0,
    take: 10,
    transport: {
        read: {
            url: baseUrl + '/' + name,
            beforeSend: (xhr) => {
                // 给当前查询请求添加Bearer令牌
                xhr.setRequestHeader('Authorization', `Bearer ${token}`);
            }
        },
        delete: {
            url: (dataItem) => `${baseUrl}/${name}(${getter('ID')(dataItem)})`,
            // 如果删除请求也需要令牌,同样可以添加beforeSend
            beforeSend: (xhr) => {
                xhr.setRequestHeader('Authorization', `Bearer ${token}`);
            }
        }
    },
    schema: {
        model: { id: 'ID' }
    }
});

为什么你的初始代码无法运行?

Kendo React的useODataDataSource中,transport.read的配置项是针对OData查询的特定参数设计的,并不包含headers属性。请求头的配置要么放在transport全局层级对所有请求生效,要么通过beforeSend函数单独为每个请求设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 10:42:33