【问题标题】:Flurl throws an exception (MoveNext())Flurl 抛出异常 (MoveNext())
【发布时间】:2019-05-15 14:25:44
【问题描述】:

我正在尝试通过 Flurl 从 WinForms 应用程序 (.Net Framework 4.7) 调用 Web API POST 操作 (.Net Core)。但是,当我尝试调试 Flurl 抛出的异常时,我的请求甚至没有进入控制器本身。

尝试逐行调试问题没有帮助。我想是因为 Web API 和 WinForms 是同一个解决方案中的两个不同项目,所以我无法进入从表单到控制器的调试?

   at Flurl.Http.FlurlRequest.<HandleExceptionAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Flurl.Http.FlurlRequest.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Flurl.Http.FlurlRequest.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Flurl.Http.HttpResponseMessageExtensions.<ReceiveJson>d__0`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at BTM.WinUI.APIService.<Insert>d__12`1.MoveNext() in C:\Users\User\Documents\Visual Studio 2019\Projects\APITest\APITest.WinUI\APIService.cs:line 61

基本上我会实例化我创建的类的一个对象并调用我的 API 服务:

var entity = new UserRegistrationModel
{
        Username = "test",
        Email = "test@test.com",
        Password = "test",
        PasswordConfirmation = "test",
        Roles = new List<int>()
};
entity.Roles.Add(1);
entity.Roles.Add(2);

await _service.Insert<User>(entity);

这就是我的调用的样子:

public async Task<T> Insert<T>(object request)
{
        string url = "https://localhost:44365/api/users";
        return await url.PostJsonAsync(request).ReceiveJson<T>();
}

我的控制器应该通过向数据库添加一个新用户并返回一个 User 对象来处理它,但该方法的代码永远不会执行。

[HttpPost]
public User Post(UserRegistrationModel request)
{
        return _service.Register(request);
}

【问题讨论】:

  • 我猜你得到的是FlurlHttpException。看看你是否能捕捉到那个异常并检查细节——它应该比堆栈跟踪更能说明问题。例如,如果 API 返回非 200 响应,则会引发异常。
  • @ToddMenier 是的,它是FlurlHttpException。通过检查它,我设法获得了上面的堆栈跟踪。异常消息说的是根本无法向我的https://localhost:44365/api/users 发出 POST 请求。
  • 您应该在异常中看到有关此错误的所有信息。 StatusCode 中的代码是什么?这个错误似乎与 FluUrl 无关,但与客户端-服务器通信有关。

标签: winforms http-post asp.net-core-webapi flurl


【解决方案1】:

可能是由于HTTPS,Flurl 无法向您的 localhost 发送 POST 请求。尝试在您的 ASP NET Core Web API 项目中禁用 SSL。

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2013-05-24
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2012-01-24
    相关资源
    最近更新 更多