如何用.NET HttpClient连接Notion API?Blazor Server授权401报错求助
Notion API 401授权错误排查方案
以下是针对Blazor Server中调用Notion API出现401错误的排查和修复步骤:
修复HttpClient请求头重复问题
如果你的client是全局复用实例,每次调用DefaultRequestHeaders.Add会重复添加Authorization和Notion-Version头,导致Notion服务器拒绝请求。建议改用HttpRequestMessage单独设置每个请求的头,避免重复:private async Task GetDatabaseContent() { string requestUri = $"https://api.notion.com/v1/pages/{pageId}"; using var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {bearerToken}"); request.Headers.Add("Notion-Version", "2022-06-28"); HttpResponseMessage response = new HttpResponseMessage(); try { response = await httpClient.SendAsync(request); } catch (Exception ex) { responseMessage = $"Exception: {ex}"; return; } if (response.IsSuccessStatusCode) { responseMessage = "Success: " + await response.Content.ReadAsStringAsync(); } else { // 读取Notion返回的详细错误信息 var errorContent = await response.Content.ReadAsStringAsync(); responseMessage = $"Error: {errorContent}"; reasonPhrase = $"Error: {response.ReasonPhrase}"; } }验证BearerToken准确性
确保bearerToken和Postman中使用的完全一致,没有多余空格、换行或截断。可通过调试模式查看变量值,或临时输出日志确认。检查PageId格式
Notion的PageId需要是32位无短横线的字符串(比如从页面URL提取时,要去掉所有-)。如果requestUri中的pageId包含短横线,会导致目标资源不存在,间接触发401或404错误。确认集成权限
确保你使用的内部集成已被添加为目标Notion页面的协作者。即使Postman能正常调用,也要检查Blazor项目中使用的集成是否和Postman一致,且页面权限设置正确。读取详细错误内容
原代码直接输出response.Content无法获取具体错误信息,改为读取response.Content.ReadAsStringAsync()后,Notion API会返回详细的授权失败原因,比如token无效、权限不足等。
内容的提问来源于stack exchange,提问作者EngineerDude
相关产品推荐
相关产品推荐

