我是最小 API 的新手,它在 ASP.NET Core 6.0 中可用,并且基于 Microsoft 的教程here和here,可以為 Get 方法定義一個示例路由,如下所示:
app.MapGet("/", () => "Hello World!");
對于Post方法,下面的代碼被提供:
...
app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{todo.Id}", todo);
});
...
在概述的其他部分中,介紹了一些特殊型別,例如:HttpContext, HttpRequest, HttpResponse, ... 并且它們似乎作為引數注入到路由方法 (Get, Post, ...); 所以所有這些引數都可用:
app.MapPost("/test", (HttpContext context, HttpRequest request, HttpResponse response) => "Hello world!");
我的問題是:這里還有哪些其他引數可用:
app.MapPost("/test", (**HERE???**) => "Hello World!") {};
uj5u.com熱心網友回復:
從檔案引數系結有下一個支持的系結源:
- 路由值
- 請求引數
- 標題
- 正文(作為 JSON)
- 依賴注入提供的服務
- 風俗
和下一個特殊型別(如您所述):
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);
BindAsync
public static ValueTask<T?> BindAsync(HttpContext context, ParameterInfo parameter);
public static ValueTask<T?> BindAsync(HttpContext context);
所以基本上你可以擁有任何可以通過 DI 決議的引數(比如TodoDb db來自示例)或者是特殊型別(HttpContext...)或者可以以某種方式系結(來自請求資料(比如Todo todo來自示例將從 json 系結)請求正文)或通過一些自定義魔法)。
uj5u.com熱心網友回復:
路由處理程式是在路由匹配時執行的方法。路由處理程式可以是一個函式或任何形狀,包括同步或異步。路由處理程式可以是 lambda 運算式、本地函式、實體方法或靜態方法。
這是來自檔案https://docs.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0#request-handling。這里有一個例子https://docs.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0#request-handling,這里也是 lambda 中存盤庫的一個例子https://dev.to/moe23/getting-started-with-minimal-apis-in-net-6-4mi4和另一個使用 Func https://medium.com/executeautomation/understanding-and-working-with- asp-net-core-6-0-minimal-api-1d25fd9ecc95。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401351.html
標籤:C# asp.net核心 .net-6.0 最小 API
