问题标签 [refit]

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 投票
0 回答
408 浏览

asp.net - OAuth2 流使用 Refit 和 Asp Net Core 2.1

好吧,我有一个使用 Asp Net Core 2.1 的 WebApi,它有一些安全端点,所以我有以下内容:

这在有人调用我的 API 时效果很好,验证没问题。我使用http://auth0.com/作为授权提供者。

现在我还需要使用Authorization Bearer Token (JWT)调用其他具有安全端点的 API 。在这种情况下,我应该使用的流程是Client Credentials。所以,我有以下步骤:

  1. 有人调用我的 API
  2. 我的 API 使用 auth0.com 作为授权提供者来验证 Jwt 令牌
  3. 我需要调用其他 API,所以我正在使用 Refit Library

我的改装界面:

我创建了我的处理程序来将 Bearer 令牌添加到我的请求中:

我的处理程序:

这可行,但我认为手动操作太多且容易出错:

  1. 有很多 OAuth2 流程需要手动实现,以生成令牌(客户端凭据、隐式流程、授权代码流程等)。
  2. 我必须实现刷新令牌逻辑。
  3. 如果到期时间仍然有效,我必须实现一些逻辑来重用令牌,而是每次都生成一个新令牌(每次都不需要命中 /token 端点)。

我在 Spring Security 框架上做了很多工作,我只能说:“Spring,我在这里使用 OAuth,所以请在每个 HTTP 请求中插入 Bearer 令牌”。Spring,拦截我在配置中设置的所有请求,并且尊重 OAuth 流(客户端凭据、授权代码流等),它对我来说是透明的,我不需要浪费我的时间。

有什么方法可以在 Asp Net Core 2.1 中实现,或者我需要手动实现令牌生成流程?

0 投票
1 回答
193 浏览

refit - 使用 Uno 平台改装 5.0 失败并出现“MissingMethodException”

我让它与 UWP 应用程序完美配合,但是一旦我尝试运行 Droid 版本,我就会收到以下错误:-

错误生成失败:System.AggregateException:发生一个或多个错误。---> System.InvalidOperationException:Uno.UI.SourceGenerators.RemoteControl.RemoteControlGenerator.System.MissingMethodException 的生成失败:找不到方法:'Microsoft.CodeAnalysis.Compilation Uno.SourceGeneration.SourceGeneratorContext.get_Compilation()'。

我不知道下一步该往哪里看。任何指针?我真的很想继续使用 Refit 和我的 REST API。

谢谢G

0 投票
2 回答
996 浏览

c# - 为所有传出的改装请求添加动态标头

我在使用 IHttpClientFactory 的 .NET Core 3.1 应用程序中使用 Refit (5.1.67) 作为我的 HttpClient 包装器。

我调用的 API 使用客户端凭据令牌进行保护。

我正在用这个注册客户:

客户端具有如下所示的方法:

我要避免的是每次调用端点时都必须显式传递 accessToken 和 userId (如上)。理想情况下,我想让我的客户看起来像这样:

感觉就像我需要某种用于传出请求的请求中间件,我可以在其中添加这两个标头。如果它们是静态的,我只会装饰整个界面,但因为这些是无法工作的运行时值。

我在文档中找不到关于这个的任何帮助,并且希望得到任何指示。

0 投票
0 回答
134 浏览

xamarin.forms - 调用 token.cancel 时,CancellationToken Source 不返回 taskcancelled

下面是我调用的服务方法....在我调用了服务之后...我的网络断开了,我取消了令牌

这意味着在我点击服务后我取消令牌......有没有办法取消我调用的服务......

下面是我的代码

行后

执行我关闭网络并调用cancellationTokenSource.Cancel();

这需要很长时间,最后得到一个“httprequestexception”而不是令牌取消异常

我该如何解决?我想在调用 token.Cancel 时取消对 web 服务的调用

0 投票
1 回答
145 浏览

c# - 错误:Newtonsoft.Json.JsonSerializationException

您好,我正在学习使用 Refit,但遇到了问题。

这些是模型

这是带有请求及其参数的接口。

这是 ArticleViewModel 中的请求

当我调试以查看数据时

我一直在寻找解决方案,但我无法解决它们,我正在独立学习。

0 投票
0 回答
20 浏览

xamarin - Xamarin 添加 Semi-Const 标头以重新调整 API 调用

[更新]

感谢评论中的杰森,我能够找到解决方案。您可以在创建将采用客户端处理程序的其余服务时提供新的 httpClient。在客户端处理程序中覆盖 SendAsync 方法并在此处为每个调用添加所需的请求标头。代码如下。

HttpClientHandler

客户端创建

[问题] 我想在标头中将平台添加到我的改装 API 调用中,但我不想通过方法调用传递它。有没有办法将在运行时创建的标头添加到所有 API 调用?我试过了,但它不起作用,因为它不是一个常数。

单独的常量类

0 投票
0 回答
36 浏览

xamarin.forms - 改装我在初始化时显示错误

我正在尝试使用 Refit 使用服务,但遇到以下问题。我正在查看文档,但找不到解决方案,也不知道是否应该做其他事情。

这是我的模型

我的第二节课:

改装应用

在我的视图模型中

初始化时

结果

0 投票
1 回答
1334 浏览

c# - 改装 HttpClient 不添加 DelegatingHandler

我正在尝试为改装客户端设置一个 HttpMessageHandler,它将授权标头添加到请求中,但是在我遵循文档和多个 github 示例之后它不起作用。

这是我的配置方式:

当我在服务层中使用它时,它得到了解决,但是当我尝试使用它时,它没有附加任何授权标头。有什么想法吗 ?

0 投票
2 回答
7131 浏览

c# - Polly 策略无法使用“AddPolicyHandler”

我有一个应用程序请求经过身份验证的服务,需要通过access_token.

我的想法是在access_token过期时使用 Polly 重试。

我在 .NET Core 3.1 应用程序中使用 Refit (v5.1.67) 和 Polly (v7.2.1)。

服务注册如下:

重试策略不起作用!

分析问题,我意识到异常没有被 HttpClient 的DelegatingHandler. 由于该AddPolicyHandler语句正在生成一个DelegatingHandler( PolicyHttpMessageHandler) 来执行该策略,并且没有在此处捕获异常,因此该策略永远不会执行。我意识到这个问题只发生在可以发送请求的异步场景中。在同步场景中它可以工作(例如:超时)。

为什么内部没有捕获异常DelegatingHandler

我附上了一个模拟 Twitter 调用的示例项目。

https://www.dropbox.com/s/q1797rq1pbjvcls/ConsoleApp2.zip?dl=0

外部参考:

https://github.com/reactiveui/refit#using-httpclientfactory

https://www.hanselman.com/blog/UsingASPNETCore21sHttpClientFactoryWithRefitsRESTLibrary.aspx

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1

0 投票
0 回答
173 浏览

c# - 改装 Xamarin Newtonsoft.Json.JsonReaderException 期望 JSON 接收 HTML 而不是 Newtonsoft.Json.JsonReaderException

我在调用 API 时收到错误,它返回 HTML(发生错误)而不是导致 Xamarin 应用程序崩溃的 JSON。我意识到这对于 API 返回它并不理想,但我正在使用它。

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:<。路径 '',第 0 行,第 0 位置。

IMyApi 类

Task<ApiResponse<ContentModel>> GetContentModel();

我的服务类

例外

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:<。路径'',第 0 行,位置 0。在 <2073514815234917a5e8f91b0b239405> 中的 Newtonsoft.Json.JsonTextReader.ParseValue () [0x002b3]:0 在 Newtonsoft.Json.JsonTextReader.Read () [0x0004c] 在 <207351481015234917a5eb8f> 中.Json.JsonReader.ReadAndMoveToContent () [0x00000] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonReader.ReadForType (Newtonsoft.Json.Serialization.JsonContract contract, System.Boolean hasConverter) [0x0004a] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x000db] 在 <2073514815234917a5e8f91b0b239405> 中:/Refit/NewtonsoftJsonContentSerializer.cs:53 at Refit.RequestBuilderImplementation.DeserializeContentAsync[T] (System.Net.Http.HttpResponseMessage resp, System.Net.Http.HttpContent content) [0x002a8] in //Refit/RequestBuilderImplementation.cs:314 at Refit.RequestBuilderImplementation+<>c__DisplayClass14_0 2[T,TBody].<BuildCancellableTaskFuncForMethod>b__0 (System.Net.Http.HttpClient client, System.Threading.CancellationToken ct, System.Object[] paramList) [0x002be] in /_/Refit/RequestBuilderImplementation.cs:258 at ContentService.GetContent () [0x0002e] in /Users/ContentService.cs:28 : ContentService Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0. at Newtonsoft.Json.JsonTextReader.ParseValue () [0x002b3] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonTextReader.Read () [0x0004c] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonReader.ReadAndMoveToContent () [0x00000] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonReader.ReadForType (Newtonsoft.Json.Serialization.JsonContract contract, System.Boolean hasConverter) [0x0004a] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x000db] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00054] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <2073514815234917a5e8f91b0b239405>:0 at Newtonsoft.Json.JsonSerializer.Deserialize[T] (Newtonsoft.Json.JsonReader reader) [0x00000] in <2073514815234917a5e8f91b0b239405>:0 at Refit.NewtonsoftJsonContentSerializer.DeserializeAsync[T] (System.Net.Http.HttpContent content) [0x000a6] in /_/Refit/NewtonsoftJsonContentSerializer.cs:53 at Refit.RequestBuilderImplementation.DeserializeContentAsync[T] (System.Net.Http.HttpResponseMessage resp, System.Net.Http.HttpContent content) [0x002a8] in /_/Refit/RequestBuilderImplementation.cs:314 at Refit.RequestBuilderImplementation+<>c__DisplayClass14_02[T,TBody].b__0(System.Net.Http.HttpClient 客户端,System.Threading.CancellationToken ct,System.Object[] paramList)[0x002be] in /_/Refit/RequestBuilderImplementation.cs :258