System.Text.json在Refit中可以使用API​​的null响应

发布于 2025-01-24 04:51:05 字数 807 浏览 0 评论 0 原文

假设我有一个REFIT接口:

public interface SomeApi
{
    [Get("/DoStuff")]
    Task<MyClass> DoStuff();
} 

我在依赖项注入中注册了此Refit客户端

services.AddRefitClient<SomeApi>(new RefitSettings(
                                    new SystemTextJsonContentSerializer(
                                        new JsonSerializerOptions
                                            {
                                                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
                                            })))
        .ConfigureHttpClient(ConfigureClient(config));

。但是,我的/dostuff 端点可以返回 null 。使用System.Text.json,这将在我的Refit客户端中抛出一个例外。使用Newtonsoft,这可以正常工作。

如果我的API端点可以返回 null ,我该如何使上述代码工作?

Suppose I have a Refit interface:

public interface SomeApi
{
    [Get("/DoStuff")]
    Task<MyClass> DoStuff();
} 

I register this refit client in my dependency injection with System.Text.Json:

services.AddRefitClient<SomeApi>(new RefitSettings(
                                    new SystemTextJsonContentSerializer(
                                        new JsonSerializerOptions
                                            {
                                                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
                                            })))
        .ConfigureHttpClient(ConfigureClient(config));

This code used to use Newtonsoft.Json, and has been refactored to use System.Text.Json. However,my /DoStuff endpoint can return null. With System.Text.Json, this will throw an exception in my Refit client. With Newtonsoft this works fine.

How do I get the above code to work if my api endpoints can return null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦罢 2025-01-31 04:51:05

在@DBC的帮助下解决了它。由于system.text.json非常严格地使用有效的JSON,而不是什么,您有两个选择:使API返回有效的JSON(在这种情况下, {} 而不是 > null ),或恢复使用newtonsoft(不太严格)。

Figured it out with the help of @dbc . Since System.Text.Json is very strict about with is valid json and what isn't, you have two options: make your API return a valid json (in this case, {} instead of null), or revert back to using Newtonsoft (which is less strict).

我是有多爱你 2025-01-31 04:51:05
new JsonSerializerOptions
    {
       PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
       DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
    }

文档

new JsonSerializerOptions
    {
       PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
       DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
    }

documentation

一袭水袖舞倾城 2025-01-31 04:51:05

如果服务器端为ASP.NET Core Web API,则关注URL可能会为您提供帮助。
响应204个状态代码在值得挑选的内容时抛出。 #1128

builder.Services.AddControllers(opt =>  // or AddMvc()
{
    // remove formatter that turns nulls into 204 - No Content responses
    // this formatter breaks Angular's Http response JSON parsing
    opt.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});

The follow URL might help you, if the server side is ASP.NET Core Web Api.
Responses with a 204 status code throw when deserializing content. #1128

builder.Services.AddControllers(opt =>  // or AddMvc()
{
    // remove formatter that turns nulls into 204 - No Content responses
    // this formatter breaks Angular's Http response JSON parsing
    opt.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文