我刚刚在我的 .net core 3.1 项目中启用了 null 检查。
问题是我有一个响应类
public class DecryptResponse
{
public DecryptStatus Status { get; set; }
//This is the attribute in question
[NotNullWhen(Status==DecryptStatus.Ok)]
public Stream? Stream { get; set; }
public string? ErrorMessage { get; set; }
}
public enum DecryptStatus
{
Ok,
InvalidData,
KeyChecksumFailure,
NoData,
UnhandledError
}
Run Code Online (Sandbox Code Playgroud)
上面的方法用于该Verify方法不允许空值的情况。
但我知道该流不为空,因为DecryptStatus==Ok
if (decryptResponse.Status != DecryptStatus.Ok)
return (decryptResponse, null);
var verifyResponse = Verify(customerId, decryptResponse.Stream);
return (decryptResponse, verifyResponse);
Run Code Online (Sandbox Code Playgroud)
是否有任何标签允许这种逻辑,或者是否需要对代码进行重大重写?
我希望能够将复杂类型作为HttpGet方法的参数来处理。
当api方法不使用任何参数时,方法pickNFirstElements起作用,但是当我尝试传递对象时,方法不起作用。
我有一个想法,我需要通知ajax查询该数据是单个对象,但是我不知道该怎么做,因为我认为那是TodoItem类中BindProperties标记的重点。
[HttpGet]
[Route("search")]
public async Task<ActionResult<TodoItem>> GetMatchingTodoItem([FromQuery]TodoItem todo)
{
// var name = todo.Name;
// var completed = todo.IsComplete;
return await _context.TodoItems.FirstAsync();
}
Run Code Online (Sandbox Code Playgroud)
function pickNFirstElements() {
const item = {
Name: "dope",
IsComplete: false,
Id: 2
}
$.ajax({
type: "GET",
url: uri+"/search",
data: { name: item.Name, isComplete: item.IsComplete, Id: Item.Id },
cache: false,
success: function (return1) {
alert(return1.name);
}
})
};
Run Code Online (Sandbox Code Playgroud)
namespace TodoApi.Models
{
[Microsoft.AspNetCore.Mvc.BindProperties(SupportsGet =true)]
public class TodoItem
{
public long Id { get; set; }
public …Run Code Online (Sandbox Code Playgroud)