gpt4 book ai didi

c# - ASP.NET Core 6.0 - 最少的 API : What parameters are available to Map methods for handling routes?

转载 作者:行者123 更新时间:2023-12-05 01:05:37 25 4
gpt4 key购买 nike

我是最小 API 的新手,它在 ASP.NET Core 6.0 中可用并基于 Microsoft 的教程 herehere ,可以像这样为 Get 方法定义一个示例路由:

app.MapGet("/", () => "Hello World!");

对于 Post 方法,以下代码 is provided :

...
app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
db.Todos.Add(todo);
await db.SaveChangesAsync();

return Results.Created($"/todoitems/{todo.Id}", todo);
});
...

在概述的其他部分,一些 Special types例如:HttpContext, HttpRequest, HttpResponse, ... 被引入,似乎它们作为参数注入(inject)到路由方法(Get,邮政, ...);所以所有这些参数都是可用的:

app.MapPost("/test", (HttpContext context, HttpRequest request, HttpResponse response) => "Hello world!");

我的问题是:这里还有哪些其他参数可用:

app.MapPost("/test", (**HERE???**) => "Hello World!") {};

最佳答案

来自文档 parameter binding有下一个支持的绑定(bind)源:

  • 路线值(value)
  • 查询字符串
  • 标题
  • 正文(作为 JSON)
  • 依赖注入(inject)提供的服务
  • 自定义

接下来是 special types (正如你提到的):

  • HttpContext :包含有关当前 HTTP 请求或响应的所有信息的上下文。
  • HttpRequest : HTTP 请求
  • HttpResponse : HTTP 响应
  • System.Threading.CancellationToken :与当前 http 请求关联的取消 token 。
  • System.Security.Claims.ClaimsPrincipal :与请求关联的用户 (HttpContext.User)。

您也可以在此处使用实现 custom binding methods 的类型:

  • TryParse(为路由、查询和 header 绑定(bind)源绑定(bind)自定义类型)
public static bool TryParse(string value, T out result);
public static bool TryParse(string value, IFormatProvider provider, T out result);
  • BindAsync
public static ValueTask<T?> BindAsync(HttpContext context, ParameterInfo parameter);
public static ValueTask<T?> BindAsync(HttpContext context);

所以基本上你可以拥有任何可以通过 DI 解析的参数(例如示例中的 TodoDb db)或者是特殊类型(HttpContext ...)或可以以某种方式绑定(bind)(从请求数据(例如示例中的 Todo todo 将从 json 请求正文绑定(bind))或通过一些自定义魔法)。

关于c# - ASP.NET Core 6.0 - 最少的 API : What parameters are available to Map methods for handling routes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70549872/

25 4 0