相关疑难解决方法(0)

不可为空的字符串类型,如何与Asp.Net Core选项一起使用

MS状态使用可为空和不可为空的引用类型更清楚地表达您的设计意图

我的目的是表达属性,Issuer并且Audience在我JwtOptions中永远不会为空。对于这些选项的消费者来说,哪个是非常合理的意图,不是吗?这些非空值由下面描述的Asp.Net Core验证来确保。

但是如果JwtOptions不是所有属性都由构造函数初始化,那么C#8编译器会报告

警告CS8618不可初始化的属性'Issuer'未初始化。

并且由于某些技术原因,Asp.Net Core选项不能具有带参数的构造函数。所以我坚持自己的意图。我可以关闭可为空的检查或声明Issuer和其他可为空的属性,但是我认为这不是最好的解决方案。

在这种情况下,有什么优雅的解决方案吗?

csproj的片段:

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  <LangVersion>8.0</LangVersion>
  <Nullable>enable</Nullable>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我在Asp.Net Core应用程序中具有以下强类型选项:

public class JwtOptions
{
    [Required]
    public string Issuer { get; set; }

    [Required]
    public string Audience { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

选项由Startup.cs中的下一个代码配置:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddOptions<JwtOptions>()
            .Bind(Configuration.GetSection("JwtOption"))
            .ValidateDataAnnotations();
    }
Run Code Online (Sandbox Code Playgroud)

并被消耗HomeController

    public HomeController(IOptions<JwtOptions> options)
    {
        string audience = options.Value.Audience;
        string issuer = options.Value.Issuer;
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,对于使用者而言,nor Audience也 …

c# asp.net-core c#-8.0 nullable-reference-types

7
推荐指数
1
解决办法
1021
查看次数