问题标签 [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.
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。所以,我有以下步骤:
- 有人调用我的 API
- 我的 API 使用 auth0.com 作为授权提供者来验证 Jwt 令牌
- 我需要调用其他 API,所以我正在使用 Refit Library
我的改装界面:
我创建了我的处理程序来将 Bearer 令牌添加到我的请求中:
我的处理程序:
这可行,但我认为手动操作太多且容易出错:
- 有很多 OAuth2 流程需要手动实现,以生成令牌(客户端凭据、隐式流程、授权代码流程等)。
- 我必须实现刷新令牌逻辑。
- 如果到期时间仍然有效,我必须实现一些逻辑来重用令牌,而是每次都生成一个新令牌(每次都不需要命中 /token 端点)。
我在 Spring Security 框架上做了很多工作,我只能说:“Spring,我在这里使用 OAuth,所以请在每个 HTTP 请求中插入 Bearer 令牌”。Spring,拦截我在配置中设置的所有请求,并且尊重 OAuth 流(客户端凭据、授权代码流等),它对我来说是透明的,我不需要浪费我的时间。
有什么方法可以在 Asp Net Core 2.1 中实现,或者我需要手动实现令牌生成流程?
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
c# - 为所有传出的改装请求添加动态标头
我在使用 IHttpClientFactory 的 .NET Core 3.1 应用程序中使用 Refit (5.1.67) 作为我的 HttpClient 包装器。
我调用的 API 使用客户端凭据令牌进行保护。
我正在用这个注册客户:
客户端具有如下所示的方法:
我要避免的是每次调用端点时都必须显式传递 accessToken 和 userId (如上)。理想情况下,我想让我的客户看起来像这样:
感觉就像我需要某种用于传出请求的请求中间件,我可以在其中添加这两个标头。如果它们是静态的,我只会装饰整个界面,但因为这些是无法工作的运行时值。
我在文档中找不到关于这个的任何帮助,并且希望得到任何指示。
xamarin.forms - 调用 token.cancel 时,CancellationToken Source 不返回 taskcancelled
下面是我调用的服务方法....在我调用了服务之后...我的网络断开了,我取消了令牌
这意味着在我点击服务后我取消令牌......有没有办法取消我调用的服务......
下面是我的代码
行后
执行我关闭网络并调用cancellationTokenSource.Cancel();
这需要很长时间,最后得到一个“httprequestexception”而不是令牌取消异常
我该如何解决?我想在调用 token.Cancel 时取消对 web 服务的调用
c# - 错误:Newtonsoft.Json.JsonSerializationException
您好,我正在学习使用 Refit,但遇到了问题。
这些是模型
这是带有请求及其参数的接口。
这是 ArticleViewModel 中的请求
当我调试以查看数据时
我一直在寻找解决方案,但我无法解决它们,我正在独立学习。
xamarin - Xamarin 添加 Semi-Const 标头以重新调整 API 调用
[更新]
感谢评论中的杰森,我能够找到解决方案。您可以在创建将采用客户端处理程序的其余服务时提供新的 httpClient。在客户端处理程序中覆盖 SendAsync 方法并在此处为每个调用添加所需的请求标头。代码如下。
HttpClientHandler
客户端创建
[问题] 我想在标头中将平台添加到我的改装 API 调用中,但我不想通过方法调用传递它。有没有办法将在运行时创建的标头添加到所有 API 调用?我试过了,但它不起作用,因为它不是一个常数。
单独的常量类
xamarin.forms - 改装我在初始化时显示错误
我正在尝试使用 Refit 使用服务,但遇到以下问题。我正在查看文档,但找不到解决方案,也不知道是否应该做其他事情。
这是我的模型
我的第二节课:
改装应用
在我的视图模型中
初始化时
c# - 改装 HttpClient 不添加 DelegatingHandler
我正在尝试为改装客户端设置一个 HttpMessageHandler,它将授权标头添加到请求中,但是在我遵循文档和多个 github 示例之后它不起作用。
这是我的配置方式:
当我在服务层中使用它时,它得到了解决,但是当我尝试使用它时,它没有附加任何授权标头。有什么想法吗 ?
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
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_0
2[T,TBody].b__0(System.Net.Http.HttpClient 客户端,System.Threading.CancellationToken ct,System.Object[] paramList)[0x002be] in /_/Refit/RequestBuilderImplementation.cs :258