问题标签 [flurl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3536 浏览

c# - 使用 Flurl 发布“multipart/form-data”

我需要发布以下请求:

我可以使用 Pythonrequests库非常轻松地做到这一点,如下所示:

有没有办法对Flurl.Http图书馆做同样的事情?

我对记录的方法的问题是它将Content-Type为每个键值对插入filename*=utf-8''标题,并将插入文件数据的标题。但是,我尝试将请求发布到的服务器不支持此功能。还要注意标题中的name和值周围的双引号。filename

编辑:下面是我用来发出帖子请求的代码Flurl.Http

0 投票
1 回答
1871 浏览

c# - 使用 Flurl GetResponseJson 进行单元测试代码()

我正在尝试对捕获 aFlurlHttpException并调用GetResponseJson<TError>()以获取 catch 块中的错误消息的控制器进行单元测试。我试图模拟异常,但该Call属性不允许我设置Settings. 当单元测试运行时,它会失败,因为设置中没有 JsonSerializer。如何设置此测试?

这是我目前不起作用的尝试:

控制器

单元测试

0 投票
1 回答
861 浏览

c# - Flurl 异常没有被捕获

我不明白为什么,但我收到了 Flurl 异常,并且这些异常没有被 try/catch 块捕获。关于为什么会发生这种情况的任何想法?

这是代码:

这是输出(我知道抛出异常的唯一原因):

在此处输入图像描述

0 投票
0 回答
300 浏览

android - 在 flurl 中实现 ModernHttpClient

尝试通过 Xamarin.Android 应用程序调用我的 REST 服务时收到此错误。SecureChannelFailure(身份验证或解密失败。)如果我只使用普通的 HttpClient,这将通过像这样简单地注入 ModernHttpClients MessageHandler 来解决

这已经过测试并且有效。但是我正在使用 flurl 所以我继续尝试通过根据这个线程覆盖 DefaultHttpClientFactory 类中的 CreateMessageHandler 方法来自定义 HttpClientFactory

这是要点

以及简单地使用 ModernHttpClients 处理程序的自定义工厂。

不幸的是,这似乎不起作用,因为我遇到了与以前相同的错误。关于如何正确地把它变成flurl的任何想法?

0 投票
1 回答
298 浏览

api - Flurl 本地主机连接被拒绝

我已经将 Flurl 设置为在我的 Xamarin PCL 中运行,并且我正在调用我在 MVC 应用程序中运行的 Web Api。

似乎 Flurl 可以毫无问题地访问我部署的 API,但由于某种原因我无法在本地测试更改。

这就是我正在做的事情:

我也尝试了一个简单的 GetAsync() 但同样无济于事。

任何帮助,将不胜感激。

编辑:

只是为了获得更多信息,该项目是对 Ionic 移动应用程序的重新开发。我已经在本地运行了 ionic 应用程序,它能够毫无问题地访问我的本地 web api,所以这不是防火墙问题或类似的问题 - 这可能是我在 Flurl 中做错的事情。

编辑2:

这是例外:

e.Message“对http://localhost:60257/api/gigapi 的请求失败。错误:ConnectFailure(连接被拒绝)”字符串

和堆栈跟踪:

StackTrace " 在 Flurl.Http.Configuration.FlurlMessageHandler+d__1.MoveNext () [0x003ec] 在 C:\projects\flurl\src\Flurl.Http.Shared\Configuration\FlurlMessageHandler.cs:62 \n--- 堆栈结束从先前引发异常的位置跟踪 ---\n 在 Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x00042] in <1c7d529d87ec4bdcbde02e9494f3b5ae>:0 \n 在 Microsoft.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccess (System.Threading.Tasks.Task 任务) [0x0001c] in <1c7d529d87ec4bdcbde02e9494f3b5ae>:0 \n 在 Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00009] 在 < 1c7d529d87ec4bdcbde02e9494f3b5ae>:0 \n 在 Microsoft.Runtime.CompilerServices.ConfiguredTaskAwaitable1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <1c7d529d87ec4bdcbde02e9494f3b5ae>:0 \n at Flurl.Http.HttpResponseMessageExtensions+<ReceiveJson>d__01[T].MoveNext () [0x00024] in C:\projects\flurl\src\Flurl.Http.Shared\HttpResponseMessageExtensions.cs:26 \n--- 堆栈跟踪从上一个引发异常的位置结束 -- -\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/ /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/ 中的 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x00047] 处的 exceptionservicescommon.cs:143 \n类/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 \n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.任务任务)[0x0002e] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 \n 在 System.Runtime。 CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x0000b] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/ TaskAwaiter.cs:128 \n 在 System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource /mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357 \n 在 C:\Users\Minneth\Documents\Projects\SarifForms\SarifForms\Login.xaml.cs 中的 SarifForms.Login+d__1.MoveNext () [0x00033] :31 " 字符串细绳细绳任务任务)[0x0000b] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 \n 在 System.Runtime。 CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs :357 \n 在 SarifForms.Login+d__1.MoveNext () [0x00033] 在 C:\Users\Minneth\Documents\Projects\SarifForms\SarifForms\Login.xaml.cs:31 "字符串任务任务)[0x0000b] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 \n 在 System.Runtime。 CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs :357 \n 在 SarifForms.Login+d__1.MoveNext () [0x00033] 在 C:\Users\Minneth\Documents\Projects\SarifForms\SarifForms\Login.xaml.cs:31 "字符串GetResult () [0x00000] in /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357 \n 在 SarifForms.Login+ d__1.MoveNext () [0x00033] 在 C:\Users\Minneth\Documents\Projects\SarifForms\SarifForms\Login.xaml.cs:31 "字符串GetResult () [0x00000] in /Users/builder/data/lanes/3819/96c7ba6c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357 \n 在 SarifForms.Login+ d__1.MoveNext () [0x00033] 在 C:\Users\Minneth\Documents\Projects\SarifForms\SarifForms\Login.xaml.cs:31 "字符串

最后更新:

答案贴在下面。

0 投票
1 回答
436 浏览

api - Flurl Post 未从 Web Api 返回

我有一个使用 Flurl 的 Xamarin 应用程序,下面是 Web Api 的帖子

Xamarin 应用程序:

网络接口:

我可以看到我的 Web Api 方法被命中,它返回预期的对象类型,而不是我的 Xamarin 应用程序继续等待 Flurl Post。

谁能告诉我可能做错了什么?

更新:

我注意到以下确实有效,但并不理想:

动态结果 = await " http://192.168.0.12:60257/api/loginapi/Login ".PostJsonAsync(new { username = "fsdafsd", password = "gdfgdsf" }).ReceiveJson();

0 投票
3 回答
5917 浏览

c# - 如何将 Polly 与 Flurl.Http 一起使用?

目前我有这个要求:

我现在想开始使用 Polly ( https://github.com/App-vNext/Polly ) 来处理重试并提供更好的用户体验。例如,由于网络连接不良,第一次尝试时不会“挂断”用户。这是我尝试使用的示例:

但它必须HttpResponse是返回类型。从我的 Flurl 示例中可以看出,它正在返回T,即使它是一个HttpResponse. T只是用于反序列化的类型StringContent

这第一个示例根本不起作用,因为我在 PCL 中使用它并且我无法获得对System.Web那里的引用。所以我尝试了这个:

但是这个也不起作用,因为 Polly 期望HttpStatusCode作为返回类型。所以我的问题是:我怎样才能告诉 polly 处理那些HttpStatusCodes 并且仍然允许我返回 type T

0 投票
1 回答
3588 浏览

c# - C# Flurl - 将 WebRequestHandler 添加到 FlurlClient

我正在与Flurl一起使用需要基于证书的身份验证的 API。我从这篇 SO 帖子中看到,向 a 添加证书WebRequestHandler并指示 aHttpClient使用此处理程序很容易。

但是,对我来说使用 Flurl 并不是很清楚。我已经尝试了以下三件事。

扩展 DefaultHttpFactory

我首先怀疑我需要创建自己的X509HttpFactory : DefaultHttpFactory来创建处理程序并将其分配给HttpClient. 但是,在查看源代码时,我注意到 for 的构造函数CreateClient已经需要一个处理程序。这个处理程序来自哪里?

使用 DefaultHttpFactory 创建客户端

这不能编译,因为HttpClient不能转换为FlurlClient

使用 ConfigureHttpClient

这似乎是最可行的选择,但我不确定,因为委托是Action没有返回类型的。

问题

使用 Flurl 支持客户端证书身份验证的最佳/正确方法是什么?

0 投票
2 回答
10053 浏览

c# - 如何使用 Flurl 上传文件和表单数据?

我正在尝试上传带有正文内容的文件。是PostMultipartAsync唯一的方法吗?

在我的 C# 后端代码中,我有这个:

FormBind从请求中读取数据并填充对象。

通过使用PostMultipartAsync我知道它应该像这样开始:

.PostMultipartAsync((mp) => { mp.AddFile(name, stream, name)}),但我不知道如何添加对象。你对此有什么想法吗?

这是我目前的尝试:

前端发出的当前请求:

在此处输入图像描述

0 投票
2 回答
694 浏览

c# - 从 winforms 应用程序调用 Flurl 永远不会返回结果

快速背景。在我构建的类库中使用了 Flurl,以简化与云存储 api 通信的代码。从用于测试所有方法的控制台应用程序调用库时效果很好。当尝试通过简单的 winform 使用完全相同的类库时,使用控制台应用程序快速返回的相同方法现在似乎永远不会返回结果。调试时,下面的代码会到达“.GetAsync()”行,然后永远不会返回结果,还会阻止调试会话继续。不会抛出任何错误消息。

我在 Flurl 网站上发现有人似乎遇到了同样的问题,但是他们似乎没有按照建议在此处发布问题。任何可以为我指明正确方向的事情都将不胜感激。

包裹在异步方法中的 Flurl 代码

完美运行的控制台应用调用代码

Winform调用代码不返回