wik*_*iki 7 c# asp.net-core .net-6.0 minimal-apis
我是 ASP.NET Core 6.0 中提供的 Minimal API 的新手,根据 Microsoft 的教程(此处和此处),可以为 Get 方法定义一个示例路由,如下所示:
app.MapGet("/", () => "Hello World!");
Run Code Online (Sandbox Code Playgroud)
对于Post方法,提供了以下代码:
...
app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
});
...
Run Code Online (Sandbox Code Playgroud)
在概述的其他部分中,介绍了一些特殊类型,例如:HttpContext
, HttpRequest
, HttpResponse
, ... ,并且它们似乎作为参数注入到路由方法(Get,Post,...);所以所有这些参数都可用:
app.MapPost("/test", (HttpContext context, HttpRequest request, HttpResponse response) => "Hello world!");
Run Code Online (Sandbox Code Playgroud)
我的问题是:这里还有哪些其他可用参数:
app.MapPost("/test", (**HERE???**) => "Hello World!") {};
Run Code Online (Sandbox Code Playgroud)
从文档中参数绑定有下一个支持的绑定源:
下一个特殊类型(正如您提到的):
HttpContext
:保存有关当前 HTTP 请求或响应的所有信息的上下文。HttpRequest
: HTTP 请求HttpResponse
:HTTP 响应System.Threading.CancellationToken
:与当前 http 请求关联的取消令牌。System.Security.Claims.ClaimsPrincipal
:与请求关联的用户 ( HttpContext.User
)。您也可以使用此处的类型来实现自定义绑定方法:
TryParse
(为路由、查询和标头绑定源绑定自定义类型)public static bool TryParse(string value, T out result);
public static bool TryParse(string value, IFormatProvider provider, T out result);
Run Code Online (Sandbox Code Playgroud)
BindAsync
public static ValueTask<T?> BindAsync(HttpContext context, ParameterInfo parameter);
public static ValueTask<T?> BindAsync(HttpContext context);
Run Code Online (Sandbox Code Playgroud)
所以基本上你可以拥有任何可以通过 DI 解析的参数(就像TodoDb db
示例中的那样)或者是特殊类型(HttpContext
...)或者可以以某种方式绑定(来自请求数据(比如Todo todo
示例中的参数将从 json 绑定)请求正文)或通过一些自定义魔法)。
归档时间: |
|
查看次数: |
12515 次 |
最近记录: |