我试图使用BindAsync手动绑定数据,我遵循了Microsoft的文档,这里有一个链接:Microsoft docs.但这对我不起作用.

我有以下简单的代码

var app = builder.Build();
app.MapGet("/Test",  ([FromQuery] Student student) =>
{
    return  $"Student: {student.Id}, {student.Name}";
}).WithTags("Student");

这是班上的学生

public class Student
 {
     public int Id { get; set; }
     public string Name { get; set; }

     public static ValueTask<Student> BindAsync(HttpContext context, ParameterInfo parameter)
     {
         string name = context.Request.Query["name"];
         int.TryParse(context.Request.Query["id"], out var id);
         var result = new Student
         {
             Name = name,
             Id = id
         };
         return ValueTask.FromResult<Student>(result);
     }
 }

我有两个问题

  1. 我收到一个错误,未找到"public static bool TryParse"
  2. 即使我像这样在学生课堂上添加简单的TryParse
public static bool TryParse(string value, out Student student)
 {
     student = new();
     return true;
 }

我仍然收到来自端点"Message": "Required parameter "Student student" was not provided from query string."的错误消息,即使我使用swagger发送了它,并且URL是这样的"https://localhost:5001/student?id=7&name=myName"

推荐答案

您不需要[FromQuery],并且您的URL不包含‘/Test’ 这里有一个例子:"https://localhost:7110/Test?Id=7&;Name=Test" 工作解决方案:

using System.Reflection;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/Test",  (Student student) => $"Student: {student.Id}, {student.Name}").WithTags("Student");

app.Run();

public class Student
{
    public int Id { get; init; }
    public string Name { get; init; }
    

    public static ValueTask<Student> BindAsync(HttpContext context, ParameterInfo parameter)
    {
        string name = context.Request.Query["name"];
        int.TryParse(context.Request.Query["id"], out var id);
        var result = new Student
        {
            Name = name,
            Id = id
        };
        return ValueTask.FromResult<Student>(result);
    }
    public static bool TryParse(string value, out Student student)
    {
        student = new();
        return true;
    }
}

Csharp相关问答推荐

使用变量子根名称在C#中重新初始化SON文件

哪个nuget包含SecurityStampValidatorOptions

为什么Blazor值在更改后没有立即呈现?

如何使用while循环实现异常处理

在C#中,DirectoryEntry返回空AuditRules集合,即使审计规则确实存在

当通过Google的Gmail Api发送邮件时,签名会产生dkim = neutral(正文散列未验证)'

如何在没有额外副本的情况下将存储在IntPtr下的原始图像数据写入WinUI3中的Image控件?

如何在Parall.ForEachAsync中使用CancerationTokenSource

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

为什么无法将对象转换为泛型类型

避免只读记录 struct 中的防御副本

按需无缝转码单个HLS数据段

这是否比决定是否使用ConfigureAWait(False)更好?

.NET Google Workspace API获取错误CS0266

如何在Xamarin.Forms中检索PanGesture事件的位置?

使用DI实例化带有动态参数的服务?

异步等待,如何在Windows窗体中使用它们?

C# -根据列表所包含的值的数量组织列表- C#