国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.NET 8 Preview 4 中的 ASP.NET Core 更新

這篇具有很好參考價(jià)值的文章主要介紹了.NET 8 Preview 4 中的 ASP.NET Core 更新。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

作者:Daniel Roth - Principal Program Manager, ASP.NET
翻譯:Alan Wang
排版:Alan Wang

.NET 8 Preview 4 現(xiàn)已可用,并包括了許多對 ASP.NET Core 的新改進(jìn)。
以下是本預(yù)覽版本中的新內(nèi)容摘要:

  • Blazor
    • 使用 Blazor 組件進(jìn)行流式渲染
    • 使用 Blazor SSR 處理表單提交
    • 在 Blazor 中路由到命名元素
    • Webcil 為 Blazor WebAssembly 應(yīng)用程序打包
  • API 編寫
    • minimal API 中表單綁定的擴(kuò)展支持
    • API 項(xiàng)目模板包含 .http 文件
  • Native AOT
    • 編譯時(shí)生成的 minimal API 的日志記錄和異常處理
    • ASP.NET Core 頂級 API 注釋以去除警告
    • 通過可配置的 HTTPS 支持縮小應(yīng)用程序大小
    • Worker Service 模板更新
    • 在 slim builder 中配置的其他默認(rèn)服務(wù)
    • API 模板 JSON 配置更改
    • 支持編譯器生成的 IAsyncEnumerable 無法表達(dá)類型的 JSON 序列化
  • 認(rèn)證和授權(quán)
    • 標(biāo)識 API 端點(diǎn)
    • 改進(jìn)使用 IAuthorizationRequirementData 的自定義認(rèn)證策略的支持
  • ASP.NET Core metrics

更多有關(guān) .NET 8 中 ASP.NET Core 的計(jì)劃,請?jiān)?GitHub 中查看完整的 ASP.NET Core .NET 8 路線圖。

開始

在 .NET 8 Preview 4 中開始 ASP.NET Core,請安裝 .NET 8 SDK。
如果您在 Windows 上使用 Visual Studio,我們建議您安裝最新的 Visual Studio 2022 preview。目前 Visual Studio for Mac 尚不支持 .NET 8 預(yù)覽版。

升級現(xiàn)有項(xiàng)目

將現(xiàn)有 ASP.NET Core 應(yīng)用從 .NET 8 Preview 3 升級到 .NET 8 Preview 4:

  • 將應(yīng)用程序的目標(biāo)框架更新為 net8.0
  • 將所有 Microsoft.AspNetCore.* 包引用更新為 8.0.0-preview.4.*
  • 將所有 Microsoft.Extensions.* 包引用更新為 8.0.0-preview.4.*

查看 .NET 8 中 ASP.NET Core 所有突破性改變的完整列表。

Blazor

使用 Blazor 組件進(jìn)行流式渲染

在 .NET 8 中,使用 Blazor 進(jìn)行服務(wù)器端渲染(SSR)時(shí),您現(xiàn)在可以在響應(yīng)流上流式傳輸內(nèi)容更新。流式渲染可以改善服務(wù)器端渲染頁面的用戶體驗(yàn),這些頁面需要執(zhí)行長時(shí)間運(yùn)行的異步任務(wù)才能完全渲染。

例如,為了渲染頁面,您可能需要進(jìn)行長時(shí)間運(yùn)行的數(shù)據(jù)庫查詢或 API 調(diào)用。通常,渲染頁面的所有異步任務(wù)都必須在渲染的響應(yīng)可以發(fā)送之前完成,這可能會導(dǎo)致頁面延遲加載。流式渲染最初使用占位符內(nèi)容渲染整個(gè)頁面,同時(shí)執(zhí)行異步操作。一旦異步操作完成,更新的內(nèi)容將通過同一響應(yīng)連接發(fā)送到客戶端,然后由 Blazor 修補(bǔ)到 DOM 中。這種方法的好處在于應(yīng)用程序的主要布局可以盡可能快地渲染,一旦內(nèi)容準(zhǔn)備好,頁面就會更新。

要啟用流式渲染,您首先需要添加新的 Blazor 腳本。

<script src="_framework/blazor.web.js" suppress-error="BL9992"></script>

注意,如果你正在將此腳本添加到 Blazor 組件(如布局組件)中,則需要添加 suppress-error="BL9992" 屬性,以避免出現(xiàn)在組件中使用腳本標(biāo)記的錯(cuò)誤。
然后,要為特定組件啟用流式渲染,請使用 [StreamRendering(true)] 屬性。這通常使用 @attribute Razor 指令完成:

@page "/fetchdata"
@using BlazorSSR.Data
@inject WeatherForecastService ForecastService
@attribute [StreamRendering(true)]
<PageTitle>Weather forecast</PageTitle>
<h1>Weather forecast</h1>
@if (forecasts is null)
{
    <p><em>Loading...</em></p>
}
else
{
    // Render weather forecasts
}
@code {
    private string message;
    protected override async Task OnInitializedAsync()
    {
        forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now));
    }
}

如今,組件不再需要等待任何異步任務(wù)即可使用占位符內(nèi)容(“Loading…”)完成初始渲染。異步任務(wù)完成后,更新的內(nèi)容被流式傳輸?shù)巾憫?yīng),然后由 Blazor 修補(bǔ)到 DOM 中。
.NET 8 Preview 4 中的 ASP.NET Core 更新,.net,asp.net,blazor,native aot

使用 Blazor SSR 處理表單提交

現(xiàn)在可以使用 Blazor 組件來處理服務(wù)器端渲染的表單提交。

要啟用從服務(wù)器處理表單提交,首先需要使用 CascadingModelBinder 組件設(shè)置模型綁定上下文。一個(gè)簡單的方法是在應(yīng)用程序的主布局中:

<CascadingModelBinder>
    @Body
</CascadingModelBinder>

要在 Blazor 中定義一個(gè)表單,可以使用現(xiàn)有的 EditForm 組件和相應(yīng)的輸入組件,比如 InputText 、InputSelect 等等。

EditForm 組件將渲染一個(gè)標(biāo)準(zhǔn)的 HTML form 元素,因此您可以使用 method 屬性來指定表單是否應(yīng)該發(fā)送 POST 請求。 GET 請求不支持 EditForm 事件處理程序。

提交表單時(shí),請求將被路由到相應(yīng)的頁面,然后由具有 handler 處理程序查詢字符串參數(shù)指定的匹配表單處理程序名稱的表單處理??梢允褂?FormHandlerName 屬性 為 EditForm 指定表單處理程序名稱。如果頁面上只有一個(gè)表單,則不需要指定名稱。然后你可以使用 EditForm 事件處理表單提交。

對模型綁定和驗(yàn)證請求數(shù)據(jù)的支持尚未實(shí)現(xiàn)(即將實(shí)現(xiàn)?。┑梢允褂?code>FormDataProvider 服務(wù)手動(dòng)處理請求數(shù)據(jù)。 FormDataProvider.Entries 屬性提供對表單數(shù)據(jù)的訪問, FormDataProvider.Name 屬性指定所需的表單處理程序。

以下是 Blazor 中一個(gè)簡單的服務(wù)器端渲染表單的樣子:

@inject FormDataProvider FormData
<EditForm method="POST" Model="exampleModel" OnValidSubmit="HandleSubmit">
    <InputText @bind-Value="exampleModel.Name" />
    <button type="submit">Submit</button>
</EditForm>
@code {
    ExampleModel exampleModel = new();
    protected override void OnInitialized()
    {
        // Manually model bind the form data using the FormDataProvider service
        if (FormData.Entries.TryGetValue("Name", out var nameValues))
        {
            exampleModel.Name = nameValues.First();
        }
    }
    void HandleSubmit()
    {
        // Handle the submitted form data
    }
    public class ExampleModel
    {
        public string? Name { get; set; }
    }
}

在 Blazor 中路由到命名元素

Blazor 現(xiàn)在支持使用客戶端路由,使用標(biāo)準(zhǔn) URL 片段導(dǎo)航到頁面上的特定 HTML 元素。如果使用標(biāo)準(zhǔn)id 屬性為 HTML 元素指定標(biāo)識符,那么當(dāng) URL 片段與元素標(biāo)識符匹配時(shí),Blazor 將正確滾動(dòng)到該元素。

Webcil 為 Blazor WebAssembly 應(yīng)用程序打包

您現(xiàn)在可以使用 Blazor WebAssembly 應(yīng)用程序試用新的 Webcil 軟件包。Webcil .NET 程序集的 web 友好包。它會刪除任何特定于本機(jī) Windows 執(zhí)行的內(nèi)容,以避免在部署到組織下載或使用 .dll 文件的環(huán)境時(shí)出現(xiàn)問題。

要使 Blazor WebAssembly 應(yīng)用程序能夠使用 Webcil,請將 WasmEnableWebcil 屬性添加到項(xiàng)目文件中:

<PropertyGroup>
    <WasmEnableWebcil>true</WasmEnableWebcil>
</PropertyGroup>

如果您在環(huán)境中使用 .webcil 文件時(shí)遇到問題,請?jiān)?GitHub 上創(chuàng)建 issue 讓我們知道。

API 編寫

minimal API 中表單綁定的擴(kuò)展支持

此預(yù)覽版本介紹了對在 minimal API 中綁定到表單類型的擴(kuò)展支持。現(xiàn)在可以在不需要FromForm 屬性的情況下推斷基于表單的參數(shù)。對基于表單的參數(shù)支持包括:IFormCollectionIFormFile 以及 IFormFileCollection。為表單參數(shù)推斷 OpenAPI 元數(shù)據(jù),以支持與 Swagger UI 的集成。

以下代碼樣例展示了如何實(shí)現(xiàn)一個(gè) minimal API,通過利用從IFormFile 類型推斷的綁定來處理文件上傳。

var app = WebApplication.Create();
string GetOrCreateFilePath(string fileName, string filesDirectory = "uploadFiles")
{
    var directoryPath = Path.Combine(app.Environment.ContentRootPath, filesDirectory);
    Directory.CreateDirectory(directoryPath);
    return Path.Combine(directoryPath, fileName);
}
async Task UploadFileWithName(IFormFile file, string fileSaveName)
{
    var filePath = GetOrCreateFilePath(fileSaveName);
    await using var fileStream = new FileStream(filePath, FileMode.Create);
    await file.CopyToAsync(fileStream);
}
app.MapPost("/upload", async (IFormFile file) => {
    var fileSaveName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
    await UploadFileWithName(file, fileSaveName);
    return TypedResults.Ok("File uploaded successfully!");
});
app.Run();

這一功能在使用基于運(yùn)行時(shí)的代碼生成以及在利用新的編譯時(shí)代碼生成的本地 AOT 場景的 minimal API 中得到支持。

注意:在應(yīng)用程序中實(shí)現(xiàn)表單時(shí),防御 XSRF 攻擊 非常重要。 此 代碼樣例 概述了如何使用 ASP.NET 中的防偽服務(wù)來支持在 minimal API 中生成和驗(yàn)證防偽令牌。

API 項(xiàng)目模板包含 .http 文件

API 項(xiàng)目模板(通過dotnet new api生成)現(xiàn)在包含一個(gè).http 文件,可用于從 Visual Studio 中的新 HTTP 編輯器向應(yīng)用程序中定義的端點(diǎn)發(fā)送請求。

@MyApi_HostAddress = http://localhost:5233
GET {{MyApi_HostAddress}}/todos/
Accept: application/json
###
GET {{MyApi_HostAddress}}/todos/1
Accept: application/json
###

Native AOT

編譯時(shí)生成的 minimal API 的日志記錄和異常處理

運(yùn)行時(shí)生成的最小 API 支持在參數(shù)綁定失敗時(shí)自動(dòng)記錄日志(或在開發(fā)環(huán)境中拋出異常)。在此預(yù)覽中,我們引入了對在編譯時(shí)通過 Request Delegate Generator (RDG)生成的 API 的相同支持。
考慮以下 API 端點(diǎn),我們通過設(shè)置<EnableRequestDelegateGenerator>true</EnableRequestDelegateGenerator>啟用了 RDG:

var app = WebApplication.Create();
app.MapGet("/hello/{name}", (string name)
    => $"Hello {name}!");
app.MapGet("/age", (DateTime birthDate)
    => $"You're about {DateTime.Now.Year - birthDate.Year} years old!");
app.Run();

發(fā)送以下請求將拋出一個(gè)BadHttpRequestException ,因?yàn)槁酚苫虿樵冏址袥]有提供所需的name 參數(shù)。

curl "http://localhost:5056/hello"
Microsoft.AspNetCore.Http.BadHttpRequestException: Required parameter "string name" was not provided from route or query string.
   ....
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

類似地,向/age 端點(diǎn)發(fā)送帶有不可解析的birthDate 值將拋出異常。

curl "http://localhost:5056/age?birthDate=invalidDate"
Microsoft.AspNetCore.Http.BadHttpRequestException: Failed to bind parameter "DateTime birthDate" from "invalidDate".
   ...
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

ASP.NET Core 頂級 API 注釋以去除警告

為幫助開發(fā)人員了解哪些功能與 Native AOT 不兼容,我們注釋了不能與 Native AOT 可靠工作的子系統(tǒng)的主要入口點(diǎn)。當(dāng)從啟用了 Native AOT 的應(yīng)用程序調(diào)用這些方法時(shí),開發(fā)人員將收到警告。例如,以下代碼段將在調(diào)用AddControllers 時(shí)生成警告,以指示此 API 不安全。
.NET 8 Preview 4 中的 ASP.NET Core 更新,.net,asp.net,blazor,native aot

通過可配置的 HTTPS 支持縮小應(yīng)用程序大小

在預(yù)覽版4中,我們進(jìn)一步減少了不需要 HTTPS 或 HTTP/3 支持的應(yīng)用程序的 Native AOT 二進(jìn)制大小。這對于在 TLS 終端代理(例如,托管在 Azure 上)后面運(yùn)行的應(yīng)用程序來說非常常見。

當(dāng)您使用新的 new WebApplication.CreateSlimBuilder時(shí),默認(rèn)情況下不會包括此功能。它可以通過分別調(diào)用builder.WebHost.UseKestrelHttpsConfiguration()builder.WebHost.UseQuic()來重新添加。

由于這些和其他更改,我們可以從預(yù)覽3更新我們的表:

我們在基準(zhǔn)測試實(shí)驗(yàn)室中運(yùn)行了一個(gè)簡單的 ASP.NET Core API 應(yīng)用程序,來比較使用和不使用 Native AOT 發(fā)布的應(yīng)用程序大小、內(nèi)存使用、啟動(dòng)時(shí)間和 CPU 負(fù)載的差異:

發(fā)布種類 啟動(dòng)時(shí)間(ms) 應(yīng)用程序大?。∕B)
Default 169 88.5
Native AOT – Preview 3 34 11.3
Native AOT – Preview 4 32 9.3

請注意應(yīng)用程序大小這 2 MB 的減小。

您可以在我們的公共基準(zhǔn)儀表盤上探索這些以及更多指標(biāo)。

Worker Service 模板更新

ASP.NET Core 中的 Worker Service 模板(可通過dotnet new worker獲得)現(xiàn)在包括對--aot 標(biāo)志的支持以啟用 AOT 發(fā)布來創(chuàng)建 Worker Service 項(xiàng)目。

dotnet new worker -o WorkerWithAot --aot

模板也進(jìn)行了更新,以利用簡化的HostApplicationBuilder 來配置應(yīng)用程序主機(jī)。

using WorkerWithAot;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();

在 slim builder 中配置的其他默認(rèn)服務(wù)

.NET 8 Preview 3 中引入的 WebApplication.CreateSlimBuilder API,初始化應(yīng)用程序中的基本功能,以最小化其部署大小。在 .NET 8 Preview 4 中,我們更新了SlimBuilder 使其包含以下功能,以改善開發(fā)體驗(yàn),同時(shí)仍將應(yīng)用程序的總體大小保持在10 MB 以下。

  • appsettings.json 和 appsettings 的 JSON 文件配置
    {EnvironmentName}.json
  • 用戶機(jī)密配置
  • 控制臺日志記錄
  • 日志記錄配置

API 模板 JSON 配置更改

我們在 .NET 8 Preview 3 中引入了新的 API 項(xiàng)目模板。在 Preview 4 中,使用 --aot 選項(xiàng)使用此模板創(chuàng)建的項(xiàng)目,已更改為將應(yīng)用程序的源代碼生成的 JsonSerializationContext 插入到 JsonSerializerOptions.TypeInfoResolverChain的開頭。以前生成的代碼使用了JsonSerializerOptions.AddContext<T> API,并且使用 Preview 3 版本的模板創(chuàng)建的任何項(xiàng)目都應(yīng)更新為調(diào)用新的 API。

您可在 .NET 8 Preview 4發(fā)布 中閱讀有關(guān)JsonSerializerOptions.TypeInfoResolverChain API 的更多信息。

支持編譯器生成的 IAsyncEnumerable 無法表達(dá)類型的 JSON 序列化

現(xiàn)在支持由 C# 編譯器實(shí)現(xiàn)的IAsyncEnumerable<T> 實(shí)現(xiàn)的 JSON 序列化,從而在配置為發(fā)布 native AOT 的 ASP.NET Core 項(xiàng)目中開房了它們的使用。如果路由處理程序返回調(diào)用 API 的結(jié)果,該 API 使用IAsyncEnumerable<T>yield return 異步返回枚舉的結(jié)果,例如從數(shù)據(jù)庫查詢中具體化行(示例),那么這將非常有用。

您可以在 .NET 8 Preview 4發(fā)布中了解更多關(guān)于 JSON 序列化程序?qū)o法表達(dá)類型的支持。

認(rèn)證和授權(quán)

標(biāo)識 API 端點(diǎn)

我們很高興介紹MapIdentityApi<TUser>() ,它是一種擴(kuò)展方法,添加了兩個(gè)新的 API 端點(diǎn)(/register/login )。MapIdentityApi 的主要目標(biāo)是使開發(fā)人員能夠輕松地在基于 JavaScript 的單頁應(yīng)用程序(SPA)或 Blazor 應(yīng)用程序中使用 ASP.NET Core Identity 進(jìn)行身份驗(yàn)證。MapIdentityApi 沒有使用基于 Razor Pages 的 ASP.NET Core Identity 提供的默認(rèn) UI,而是添加了更適合 SPA 應(yīng)用程序和非瀏覽器應(yīng)用程序的 JSON API 端點(diǎn)。

除了用戶注冊和登錄之外,身份 API 端點(diǎn)還將在即將到來的預(yù)覽中支持雙重身份驗(yàn)證和電子郵件驗(yàn)證等功能。您可以在 ASP.NET Core GitHub 存儲庫上標(biāo)記為 feature-token-identity 的 issue 中找到計(jì)劃功能的列表。

以下展示了 ASP.NET Core 應(yīng)用程序的Program.cs ,該應(yīng)用程序使用 MapIdentityApi 來啟用 opaque bearer token 和 cookie 身份驗(yàn)證。要單獨(dú)啟用 cookie 或令牌身份驗(yàn)證,您可以直接調(diào)用現(xiàn)有的AddCookie 或新的AddBearerToken AuthenticationBuilder 擴(kuò)展方法。兩者都是通過下面的AddIdentityApiEndpoints 方法完成的:

// usings ... 
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthorization();
builder.Services.AddDbContext<ApplicationDbContext>(
    options => options.UseSqlite(builder.Configuration["ConnectionString"]));
builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();
var app = builder.Build();
app.MapGroup("/identity").MapIdentityApi<IdentityUser>();
app.MapGet("/requires-auth", (ClaimsPrincipal user) => $"Hello, {user.Identity?.Name}!").RequireAuthorization();
app.Run();
// public class ApplicationDbContext : IdentityDbContext<IdentityUser> ...

在客戶端上,假設(shè)httpClient、 usernamepassword 已在 .NET 控制臺應(yīng)用程序中初始化,則可以如下調(diào)用 /register 端點(diǎn):

// Email confirmation will be added later.
// The request body is: { "username": "<username>", "password": "<password>" }
await httpClient.PostAsJsonAsync("/identity/register", new { username, password });

您可以使用 /login 端點(diǎn)登錄并獲得 opaque bearer token:

// 2fa flow will be added later.
// The request body is: { "username": "<username>", "password": "<password>" }
var loginResponse = await httpClient.PostAsJsonAsync("/identity/login", new { username, password });
// loginResponse is similar to the "Access Token Response" defined in the OAuth 2 spec
// {
//   "token_type": "Bearer",
//   "access_token": "...",
//   "expires_in": 3600
// }
// refresh token is likely to be added later
var loginContent = await loginResponse.Content.ReadFromJsonAsync<JsonElement>();
var accessToken = loginContent.GetProperty("access_token").GetString();
httpClient.DefaultRequestHeaders.Authorization = new("Bearer", accessToken);
Console.WriteLine(await httpClient.GetStringAsync("/requires-auth"));

或者,如果您想獲得一個(gè) cookie,您可以在 /login 隊(duì)列字符串中設(shè)置 ?cookieMode=true

// HttpClientHandler.UseCookies is true by default on supported platforms.
// The request body is: { "username": "<username>", "password": "<password>" }
await httpClient.PostAsJsonAsync("/identity/login?cookieMode=true", new { username, password });
Console.WriteLine(await httpClient.GetStringAsync("/requires-auth"));

我們期待您對我們早期工作的反饋,以改善 SPA 和移動(dòng)應(yīng)用程序的身份體驗(yàn)。

改進(jìn)使用 IAuthorizationRequirementData的自定義認(rèn)證策略的支持

在此預(yù)覽版本之前,向端點(diǎn)添加參數(shù)化授權(quán)策略需要編寫大量代碼。

  • 為每個(gè)策略實(shí)現(xiàn) AuthorizeAttribute
  • 實(shí)現(xiàn) AuthorizationPolicyProvider 以處理基于字符串的合同中的自定義策略
  • 為策略實(shí)現(xiàn) AuthorizationRequirement
  • 為每個(gè)需求實(shí)現(xiàn)一個(gè) AuthorizationHandler

下面是自定義參數(shù)化策略的部分實(shí)現(xiàn)。未刪節(jié)版本包含完整的代碼。

var builder = WebApplication.CreateBuilder();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
builder.Services.AddSingleton<IAuthorizationPolicyProvider, MinimumAgePolicyProvider>();
builder.Services.AddSingleton<IAuthorizationHandler, MinimumAgeAuthorizationHandler>();
var app = builder.Build();
app.MapControllers();
app.Run();
[ApiController]
[Route("api/[controller]")]
public class GreetingsController : Controller
{
    [MinimumAgeAuthorize(16)]
    [HttpGet("hello")]
    public string Hello(ClaimsPrincipal user) => $"Hello {(user.Identity?.Name ?? "world")}!";
}
class MinimumAgeAuthorizeAttribute : AuthorizeAttribute { }
class MinimumAgePolicyProvider : IAuthorizationPolicyProvider { }
class MinimumAgeRequirement : IAuthorizationRequirement { }
class MinimumAgeAuthorizationHandler : AuthorizationHandler<MinimumAgeRequirement> { }

此預(yù)覽引入了IAuthorizationRequirementData 接口,該接口允許屬性定義也指定與授權(quán)策略相關(guān)聯(lián)的要求。通過利用這一變化,我們可以用更少的代碼行重新實(shí)現(xiàn)我們的自定義授權(quán)策略。未刪節(jié)版本包含完整的代碼。

var builder = WebApplication.CreateBuilder();
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
builder.Services.AddSingleton<IAuthorizationHandler, MinimumAgeAuthorizationHandler>();
var app = builder.Build();
app.MapControllers();
app.Run();
[ApiController]
[Route("api/[controller]")]
public class GreetingsController : Controller
{
    [MinimumAgeAuthorize(16)]
    [HttpGet("hello")]
    public string Hello(ClaimsPrincipal user) => $"Hello {(user.Identity?.Name ?? "world")}!";
}
class MinimumAgeAuthorizeAttribute : AuthorizeAttribute, IAuthorizationRequirement, IAuthorizationRequirementData
{
    public MinimumAgeAuthorizeAttribute(int age) => Age =age;
    public int Age { get; }
    public IEnumerable<IAuthorizationRequirement> GetRequirements()
    {
        yield return this;
    }
}
class MinimumAgeAuthorizationHandler : AuthorizationHandler<MinimumAgeAuthorizeAttribute>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumAgeAuthorizeAttribute requirement) { ... }
}

ASP.NET Core metrics

Metrics 是隨著時(shí)間的推移報(bào)告的測量結(jié)果,最常用于監(jiān)控應(yīng)用程序的運(yùn)行狀況和生成警報(bào)。例如報(bào)告失敗 HTTP 請求的計(jì)數(shù)器可以顯示在儀表盤中,或者在失敗超過閾值時(shí)生成警報(bào)。

此預(yù)覽版本使用 System.Diagnostics.Metrics 在整個(gè) ASP.NET Core 中添加了新的指標(biāo)。Metrics 是一個(gè)現(xiàn)代 API,用于報(bào)告和收集有關(guān)應(yīng)用程序的信息。

與現(xiàn)有事件計(jì)數(shù)器相比,Metrics 提供了許多改進(jìn):

  • 具有計(jì)數(shù)器、儀表和直方圖的新型測量
  • 具有多維價(jià)值的強(qiáng)大報(bào)告
  • 通過與 Open Telemetry 標(biāo)準(zhǔn)保持一致,集成到更廣泛的云原生生態(tài)系統(tǒng)中

Metrics 已經(jīng)為 ASP.NET Core 托管、Kestrel 和 SignalR 添加了度量。預(yù)計(jì)未來會有更多的 .NET API 來獲取 metrics。

如果您有興趣嘗試 metrics,我們已將 Grafana 儀表盤組合在一起,用于報(bào)告 Prometheus 收集的 ASP.NET Core metrics。您可以在 aspnetcore-grafana repository 獲取儀表盤,并將其導(dǎo)入到您自己的 Grafana 環(huán)境中。
.NET 8 Preview 4 中的 ASP.NET Core 更新,.net,asp.net,blazor,native aot

提供反饋

我們希望您喜歡 .NET 8 中的 ASP.NET Core 預(yù)覽版。請?jiān)?GitHub 上提交 issue 讓我們知道您對這些新改進(jìn)的看法。

感謝您試用 ASP.NET Core!文章來源地址http://www.zghlxwxcb.cn/news/detail-523608.html

到了這里,關(guān)于.NET 8 Preview 4 中的 ASP.NET Core 更新的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET Core 中的 Razor Pages

    Razor Pages 是基于頁面的 ASP.NET Core Web App 架構(gòu)。 相比 MVC 模式,Razor Pages的生產(chǎn)效率更快。 Razer Pages 需要兩個(gè)中間件: builder…Services.AddRazorPages 添加 Razor Pages services app.MapRazorPages 添加 Razor Pages endpoints .cshtml 與 .cshtml.cs 在最簡單的頁面中: 看起來與 MVC 的頁面差不多,但特別之

    2024年02月09日
    瀏覽(33)
  • ASP.NET Core 中的 Dependency injection

    依賴注入 (Dependency Injection,簡稱DI)是為了實(shí)現(xiàn) 各個(gè)類之間的依賴 的 控制反轉(zhuǎn) (Inversion of Control,簡稱IoC )。 ASP.NET Core 中的Controller 和 Service 或者其他類都支持依賴注入。 依賴注入術(shù)語中, Service 是一個(gè)為其他對象提供服務(wù)的類 **。 Service 不是一個(gè)Web Service,與Web Serv

    2024年02月11日
    瀏覽(23)
  • ASP.NET Core 中的 wwwroot 文件夾

    ASP.NET Core 中的 wwwroot 文件夾

    在本文中,我將討論 ASP.NET Core 應(yīng)用程序中的 wwwroot 文件夾。請閱讀我們之前討論過ASP.NET Core 請求處理管道的文章。在本文的最后,您將了解 wwwroot 文件夾及其需求以及如何在 ASP.NET Core 應(yīng)用程序中進(jìn)行配置。 ASP.NET Core 中的 wwwroot 文件夾是什么? 默認(rèn)情況下,ASP.NET Core 應(yīng)用

    2024年02月04日
    瀏覽(27)
  • DevExpress DXperience Crack Blazor, ASP.NET, ASP.NET MVC

    DevExpress DXperience Crack Blazor, ASP.NET, ASP.NET MVC

    DevExpress DXperience helps you build applications for Windows, Web, mobile and tablet with all of the DevExpress single platform controls and more. The DevExpress DXperience Subscription includes hundreds of Desktop UI Controls (WinForms, WPF and Desktop Reporting), Web UI Controls (Blazor, ASP.NET, ASP.NET MVC and Core, Bootstrap Web Forms, JavaScript - jQ

    2024年04月11日
    瀏覽(24)
  • ASP.NET Core 中的兩種 Web API

    ASP.NET Core 有兩種創(chuàng)建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基類定義接口endpoints。 基于 Minimal APIs,使用Lambda表達(dá)式定義接口 endpoints。 基于 Controller 的 Web API 可以使用構(gòu)造函數(shù)注入,或者屬性注入,遵循面向?qū)ο竽J健?基于 Minimal APIs 的 Web API 通

    2024年02月09日
    瀏覽(34)
  • 安全機(jī)密管理:Asp.Net Core中的本地敏感數(shù)據(jù)保護(hù)技巧

    安全機(jī)密管理:Asp.Net Core中的本地敏感數(shù)據(jù)保護(hù)技巧

    在我們開發(fā)過程中基本上不可或缺的用到一些敏感機(jī)密數(shù)據(jù),比如 SQL 服務(wù)器的連接串或者是 OAuth2 的 Secret 等,這些敏感數(shù)據(jù)在代碼中是不太安全的,我們不應(yīng)該在源代碼中存儲密碼和其他的敏感數(shù)據(jù),一種推薦的方式是通過 Asp.Net Core 的 機(jī)密管理器 。 在 ASP.NET Core 中,機(jī)密

    2024年04月25日
    瀏覽(26)
  • [Asp.Net Core] 網(wǎng)站中的XSS跨站腳本攻擊和防范

    [Asp.Net Core] 網(wǎng)站中的XSS跨站腳本攻擊和防范

    漏洞說明: 跨站腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Web腳本代碼(html、javascript、css等),當(dāng)用戶瀏覽該頁面時(shí),嵌入其中的Web腳本代碼會被執(zhí)行,從而達(dá)到惡意攻擊

    2023年04月14日
    瀏覽(18)
  • Web SSH 的原理與在 ASP.NET Core SignalR 中的實(shí)現(xiàn)

    Web SSH 的原理與在 ASP.NET Core SignalR 中的實(shí)現(xiàn)

    有個(gè)項(xiàng)目,需要在前端有個(gè)管理終端可以 SSH 到主控機(jī)的終端,如果不考慮用戶使用 vim 等需要在控制臺內(nèi)現(xiàn)實(shí)界面的軟件的話,其實(shí)使用 Process 類型去啟動(dòng)相應(yīng)程序就夠了。而這次的需求則需要考慮用戶會做相關(guān)設(shè)置。 這里用到的原理是偽終端。偽終端(pseudo terminal)是現(xiàn)

    2024年02月07日
    瀏覽(20)
  • ASP.NET和ASP.NET Core的區(qū)別

    ASP.NET和ASP.NET Core是兩個(gè)不同的Web應(yīng)用程序框架,它們都是由Microsoft開發(fā)的。ASP.NET是Microsoft推出的第一個(gè)Web應(yīng)用程序框架,而ASP.NET Core是其最新版本。本文將介紹ASP.NET和ASP.NET Core的簡介和區(qū)別。 ASP.NET的簡介 ASP.NET是一個(gè)基于.NET框架的Web應(yīng)用程序框架,它是Microsoft推出的第一

    2024年02月16日
    瀏覽(96)
  • ASP.NET Core教程:ASP.NET Core 程序部署到Windows系統(tǒng)

    ASP.NET Core教程:ASP.NET Core 程序部署到Windows系統(tǒng)

    本篇文章介紹如何將一個(gè)ASP.NET Core Web程序部署到Windows系統(tǒng)上。這里以ASP.NET Core WebApi為例進(jìn)行講解。首先創(chuàng)建一個(gè)ASP.NET Core WebApi項(xiàng)目,使用默認(rèn)的Values控制器,這里使用Visual Studio 2019創(chuàng)建一個(gè)ASP.NET Core 3.1d的WebApi項(xiàng)目。 創(chuàng)建新項(xiàng)目的時(shí)候選項(xiàng)ASP.NET Core Web應(yīng)用程序,如下圖所

    2023年04月08日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包