ASP.NET Core 6 Web API实现Xero账户授权及Swagger重定向报错咨询
ASP.NET Core 6 Web API 实现Xero账户授权可行性及Swagger跳转错误解决
可行性说明
完全可行。Xero基于OAuth 2.0协议提供账户授权能力,ASP.NET Core 6可通过两种方式对接:
- 使用官方Xero.NET SDK,它封装了OAuth 2.0授权流程、Token管理等逻辑,能快速完成Xero API对接。
- 自行实现OAuth 2.0流程:先注册Xero开发者应用获取Client ID和Client Secret,再配置授权请求、回调处理、Token获取与刷新逻辑,ASP.NET Core自带的
Microsoft.AspNetCore.Authentication.OAuth包可提供基础支持。
Swagger跳转"Failed to fetch"错误解决
针对你遇到的错误,逐一排查修复:
1. 修正CORS配置
Swagger页面(通常为https://localhost:<端口号>/swagger)属于跨域请求,需在ASP.NET Core中配置允许该域名的跨域访问:
// Program.cs var builder = WebApplication.CreateBuilder(args); // 添加CORS服务 builder.Services.AddCors(options => { options.AddPolicy("SwaggerCors", policy => { policy.WithOrigins("https://localhost:<你的Swagger端口>") // 替换为实际Swagger地址 .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); // 若需携带Cookie等凭证则启用 }); }); // 注册其他服务... var app = builder.Build(); // 在UseRouting之后、UseAuthorization之前启用CORS app.UseCors("SwaggerCors"); // 其他中间件配置... app.UseSwagger(); app.UseSwaggerUI();
2. 确保授权URL协议正确
Xero授权端点仅支持HTTPS,确认你生成的授权URL为https://login.xero.com/identity/connect/authorize,绝对不能使用HTTP。检查代码中拼接的授权地址是否存在协议错误。
3. 调整Swagger跳转方式
不要通过前端fetch请求触发重定向,这会触发CORS预检查导致错误。正确做法:
- 后端API直接返回重定向响应:
[HttpGet("authorize-xero")] public IActionResult RedirectToXeroAuth() { var authorizeUrl = "https://login.xero.com/identity/connect/authorize?client_id=你的ClientID&response_type=code&redirect_uri=你的回调地址&scope=openid profile email accounting.transactions"; return Redirect(authorizeUrl); } - 在Swagger中直接添加外部链接(通过SwaggerUI配置),让用户点击跳转,避免跨域请求:
app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "Xero Auth API V1"); options.InjectJavascript("/swagger-ui/custom.js"); // 通过自定义JS添加跳转链接 });
4. 排查网络问题
确认开发环境可正常访问https://login.xero.com,检查防火墙、代理设置是否拦截请求,可直接在浏览器中访问Xero授权地址验证网络连通性。
内容的提问来源于stack exchange,提问作者Irfan
相关产品推荐
相关产品推荐

