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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:54:02