【发布时间】:2023-01-13 00:51:36
【问题描述】:
使用minimalistic API MapGet 如何自动填充查询字符串中的参数?
使用简约的 API,以下是可能的:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("api/Students/Grades", StudentsDataContext.GetGradesAsync).RequireAuthorization("Admin");
//...
public class Grade
{
public string? Subject { get; set; }
public int GradePercentage { get; set; } = 0;
}
public class StudentsDataContext
{
public static async Task<List<Grade>> GetGradesAsync(int? studentId, ClaimsPrincipal user, CancellationToken ct))
{
// Gets grades from database...
return new List<Grade>() {
new () { Subject = "Algebra", GradePercentage=95 },
new () { Subject = "English", GradePercentage=90 }
};
}
}
当你打电话时:/api/Students/Grades?studentId=5
神奇地,studentId 被传递给 GetGradesAsync、ClaimsPrinicipal 和 CancellationToken。
这个巫术是如何运作的?是否有可能学习这种黑暗面的力量?
【问题讨论】:
-
...代码是开源的...是什么阻止您研究代码? ...但基本上您可以通过反射获取方法参数...您可以检查可以从 DI continer 注入哪些参数...其余的您可以尝试从查询字符串中获取
-
@Selvin 我找过了。在dotnet GitHub中,我只找到了例子。我找不到 MapGet 的源代码。
-
这已经预先在 ASP 核心中完成。它被称为model binding
-
dotnetfiddle.net/xs13OE 然后检查参数是否从 DI 注入...如果没有 - 然后尝试解析任何内容(查询字符串,路径...)...这很容易想象
-
@SudipShrestha:这基本上是反思。 aspnet 运行时检查您的方法并尝试找出如何收集所有参数。 DI 容器绑定服务。请求数据绑定查询字符串值。然后运行时就打电话给你。根本没有巫术。
标签: c# query-string minimal-apis asp.net-core-7.0