Google Code Prettify

顯示具有 Blazor 標籤的文章。 顯示所有文章
顯示具有 Blazor 標籤的文章。 顯示所有文章

ASP.NET Core 9.0 在 .NET 9 是新增加了什麼?

ASP.NET Core 9.0 随着 .NET 9 的发布,引入了多项新功能和改进,主要包括以下方面:

1. 静态资产传递优化

引入了 MapStaticAssets 中间件,用于优化应用程序中静态资产的传递。该功能旨在减少提供给浏览器的资产大小,降低网络传输的字节数,并避免向客户端提供过时的文件版本。这对于所有 UI 框架(如 Blazor、Razor Pages 和 MVC)都适用,是 UseStaticFiles 的替代方法。

2. Blazor 的新功能

  • 改进的服务器端重新连接体验:当用户返回已断开连接的应用时,系统会立即尝试重新连接,页面会自动刷新,避免用户手动刷新。

  • 简化的身份验证状态序列化:通过新的 API,更轻松地向现有 Blazor Web 应用添加身份验证。默认情况下,服务器端仅序列化名称和角色声明。

3. SignalR 的新功能

中心方法现在支持多态类型,允许接受基类参数以实现多态方案。需要对基类型进行注释以实现多态性。

4. 最小 API 的新功能

  • TypedResults 类增强:添加了 InternalServerError 方法,用于从终结点返回 500 内部服务器错误响应。

  • 改进的 ProblemValidationProblem 结果类型构建:支持使用 IEnumerable<KeyValuePair<string, object?>> 初始化 errorsextensions 属性。

5. 内置 OpenAPI 支持

ASP.NET Core 现在提供内置支持,通过 Microsoft.AspNetCore.OpenApi 包生成基于控制器的 API 或最小 API 的 OpenAPI 文档。该功能支持裁剪和本机 AOT。

6. 身份验证和授权的新功能

OpenIdConnectHandler 现在支持推送授权请求(PAR),以防止浏览器中的网络攻击者查看或篡改授权参数。

7. 其他新功能

  • HybridCache:弥补了现有 IDistributedCacheIMemoryCache API 的差距,添加了如“踩踏”保护和可配置序列化等新功能。

  • 开发人员异常页改进:将终结点元数据添加到开发人员异常页面,改进了字典和其他键值集合的调试显示。

  • IIS 中应用程序回收期间的 503 错误修复:默认情况下,IIS 在收到回收或关闭通知与 ANCM 通知托管服务器启动关闭之间有 1 秒的延迟。

  • 指标改进:在生产环境中以最小影响继续使用,用于调查性能问题和观察对 Kestrel 造成影响的外部攻击。

这些更新旨在提升 ASP.NET Core 的性能、安全性和开发体验。

Razor 元件如何整合到 ASP.NET Core MVC 中使用

在 ASP.NET Core MVC 中整合 Razor 元件(Razor Components)是可能的,這允許你利
用 Blazor 的優勢,並將其嵌入到現有的 MVC 或 Razor Pages 應用中。以下是如何在 
ASP.NET Core MVC 應用中整合和使用 Razor 元件的步驟:


步驟 1:設置專案
確保你的 ASP.NET Core MVC 專案已經包含 Blazor Server 的支持。如果還沒有,你需要安裝相關的 NuGet 套件:

bash

dotnet add package Microsoft.AspNetCore.Components.Web
dotnet add package Microsoft.AspNetCore.Components.WebAssembly.Server
確保在 Startup.cs 中配置 Blazor Server。


步驟 2:配置 Startup.cs
在 Startup.cs 文件中,添加 Blazor Server 的配置。

csharp

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor(); // 添加這一行
    services.AddControllersWithViews();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        endpoints.MapBlazorHub(); // 添加這一行
        endpoints.MapFallbackToPage("/_Host"); // 添加這一行
    });
}


步驟 3:創建 Razor 元件
在你的專案中創建一個新的 Razor 元件,例如 MyComponent.razor。

razor

<!-- MyComponent.razor -->
@page "/mycomponent"

<h3>Hello from MyComponent</h3>

<p>Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}


步驟 4:創建 _Host.cshtml 文件
在 Pages 文件夾中創建一個 _Host.cshtml 文件。這個文件是 Blazor Server 的入口點。

html

@page "/_Host"
@namespace YourNamespace.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Blazor Server</title>
    <base href="~/" />
    <link href="css/site.css" rel="stylesheet" />
</head>
<body>
    <app>
        <component type="typeof(App)" render-mode="ServerPrerendered" />
    </app>

    <script src="_framework/blazor.server.js"></script>
</body>
</html>


步驟 5:創建 App.razor 文件
在 Pages 文件夾中創建一個 App.razor 文件,並設置路由。

razor

<!-- App.razor -->
<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="routeData" DefaultLayout="@typeof(MainLayout)" />
        <FocusOnNavigate RouteData="routeData" Selector="h1" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>


步驟 6:在 MVC View 中使用 Razor 元件
你可以在 MVC View 中使用 Blazor 元件,這需要將 Blazor 元件嵌入到你的 MVC 頁面中。

首先,創建一個 MVC View,例如 Views/Home/Index.cshtml:

html

@{
    ViewData["Title"] = "Home Page";
}

<div>
    <h1>Welcome to ASP.NET Core MVC with Blazor</h1>
    <component type="typeof(MyComponent)" render-mode="ServerPrerendered" />
</div>
確保你已經在 _ViewImports.cshtml 中添加了以下指令:

csharp

@using YourNamespace
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.Components.Web


步驟 7:運行應用
現在,你應該能夠運行應用並在 MVC 頁面中看到 Blazor 元件的內容。



總結
通過這些步驟,你已經成功地在 ASP.NET Core MVC 應用中整合了 Blazor 元件。這樣,你
可以在現有的 MVC 應用中利用 Blazor 的強大功能來構建互動性更強的用戶界面。