在ASP.Net6项目中禁用空验证

vwkv1x7d  于 2022-12-24  发布在  .NET
关注(0)|答案(3)|浏览(543)

我有一个用.Net 6创建的非常简单的ASP.Net WebAPI项目。

[HttpPost]
public async Task DoStuff(MyClass input)
{
   // snip
}

其中MyClass如下所示:

public class MyClass
{
    public string MyData { get; set; }
}

将其发布到以前版本的ASP.NET中允许的DoStuff方法:

{
    MyData: null
}

但是现在,它给出了400响应,除非我将MyData声明为string?而不是string。我的问题是MyClass类不能更改,所以我无法将MyData更新为string?类型。是否有办法禁用ASP.NET对MyClass属性进行的自动空值验证?将<Nullable>disable</Nullable>添加到WebAPI项目的csproj文件中似乎没有任何作用。

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Platforms>x64</Platforms>
    <Nullable>disable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <NoWarn>1701;1702;1591</NoWarn>
    <UserSecretsId>MyProject</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\AnotherProject.csproj" />
  </ItemGroup>

</Project>
n6lpvg4x

n6lpvg4x1#

这是C# 8 nullable reference types的一个特性,在.NET 6中默认启用。要关闭它,请在csproj文件中添加<Nullable>disable</Nullable>行。例如:

<PropertyGroup>
  <Nullable>disable</Nullable>
</PropertyGroup>

另外,如果MyClass在另一个项目中,也要在那里添加<Nullable>disable</Nullable>

o7jaxewo

o7jaxewo2#

如果在csproj中禁用nullable,则在使用nullable运算符()时可能会导致警告。将以下代码添加到.editorconfig将允许您使用两种方法(nullable或non-nullable),而不会出现任何其他警告。
您可以在解决方案项目中编辑**.editorconfig文件。已在[*.{cs,vb}]**节末尾添加了以下行

#### Naming styles ####
[*.{cs,vb}]

# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
dotnet_diagnostic.CS8618.severity = none

# CS8601: Possible null reference assignment.
dotnet_diagnostic.CS8601.severity = none
qojgxg4l

qojgxg4l3#

另一种方法是,如果您使用了可为空的变量/属性/参数,那么在将可为空设置为disable时,您将收到另一个警告。
为了防止这种情况,同时也为了禁用可空警告,我建议使用选项“ANOTATIONS”,当您指定某个内容可空并且不使用它时,它会显示警告:

相关问题