Refit调用提示找不到认证方法但Swagger可正常调用如何解决?
问题原因
- 接口路由不匹配:你在Refit接口中标记的POST路径为
/Users/,但你实际的登录接口路由是/Users/Authenticate,路径不一致导致服务端无法匹配到对应接口。 - 入参缺少Body标记:Refit要求POST请求中需要作为请求体传递的参数,必须显式添加
[Body]特性,否则参数不会被序列化为JSON放到请求体中,服务端[FromBody]绑定会失败。 - 可选检查:确认你定义的
User类和控制器接收的AuthenticateRequest类的属性名、属性类型完全一致,避免序列化后服务端参数绑定失败。
修正方案
首先调整ILoginAPI的定义:
public interface ILoginAPI { // 修正为实际的接口路由,给参数添加[Body]标记 [Post("/Users/Authenticate")] Task<Token> Authenticate([Body] User user); }
另外建议你调整调用代码的写法,避免用.Result同步阻塞引发ASP.NET Core线程死锁:
public async Task<IActionResult> Index() { var loginAPI = RestService.For<ILoginAPI>(Constants.APIUrl); Token token = await loginAPI.Authenticate( new User() { Username = "David", Password = "Test12345", }); var mytokenHere = JsonConvert.SerializeObject(token); var test = token.Authenticated; return View(); }
如果调整后还有参数绑定错误,直接把Refit接口的参数类型改成AuthenticateRequest即可。
内容的提问来源于stack exchange,提问作者dotnetdevcsharp
相关产品推荐
相关产品推荐

