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

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

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

作者:Daniel Roth
排版:Alan Wang

.NET 8 Preview 7 現(xiàn)在已經(jīng)發(fā)布,其中包括了對(duì) ASP.NET Core 的許多重要更新。
以下是預(yù)覽版本中新增功能的摘要:

  • 服務(wù)器和中間件
    • 防偽中間件
  • API 編寫
    • 最小 API 的防偽集成
  • Native AOT
    • 請(qǐng)求委托生成器支持?jǐn)r截器功能
    • Full TrimMode 用于啟用修剪功能編譯的 Web 項(xiàng)目
    • WebApplication.CreateEmptyBuilder
  • Blazor
    • 防偽集成
    • 服務(wù)器端表單處理改進(jìn)
    • Auto 渲染模式
    • 注冊(cè) root-level 級(jí)聯(lián)值
    • 改進(jìn)了交互式組件與服務(wù)器端渲染的集成
    • Virtualize 的新參數(shù) EmptyContent
  • Identity
    • 新的承載令牌身份驗(yàn)證處理程序
    • 新的 API 端點(diǎn)
  • 單頁應(yīng)用程序(SPA)
    • 新的 Visual Studio 模板

有關(guān)為 .NET 8的 ASP.NET Core 規(guī)劃的更多詳細(xì)信息,請(qǐng)參閱 GitHub 上的 .NET 8 的完整 ASP.NET Core 路線圖。

入門

如果您想要在 .NET 8 Preview 7 中使用 ASP.NET Core,請(qǐng)安裝 .NET 8 SDK。

如果您在 Windows 上使用 Visual Studio,我們建議您安裝最新的 Visual Studio 2022 預(yù)覽版。如果您使用的是 Visual Studio Code,那么可以嘗試新的 C# 開發(fā)工具包。如果您使用的是 macOS,那么可以在“Preferences”中啟用 .NET 8 的預(yù)覽功能后使用 Visual Studio for Mac 17.6.1 進(jìn)行開發(fā)。

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

若要將現(xiàn)有 ASP.NET Core 應(yīng)用程序從 .NET 8 Preview 6 升級(jí)到 .NET 8 Preview 7,請(qǐng)執(zhí)行以下操作:

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

具體信息請(qǐng)參閱 .NET 8 的 ASP.NET Core 重要更新的完整列表。

服務(wù)器和中間件

防偽中間件

此版本添加了一個(gè)用于驗(yàn)證防偽令牌以及減輕跨站點(diǎn)請(qǐng)求偽造攻擊的中間件。當(dāng)通過 AddAntiforgery 方法注冊(cè)防偽服務(wù)時(shí),防偽中間件會(huì)自動(dòng)在目標(biāo)應(yīng)用程序中啟用。

var builder = WebApplication.CreateBuilder();

builder.Services.AddAntiforgery();

var app = builder.Build();

// 由 WebApplicationBuilder 隱式添加
// app.UseAntiforgery();

app.Run();

防偽中間件本身不會(huì)中斷請(qǐng)求流水線的執(zhí)行。相反,該中間件會(huì)在當(dāng)前請(qǐng)求的 HttpContext.Features 中設(shè)置 IAntiforgeryValidationFeature。中間件期望每個(gè)框架實(shí)現(xiàn)(最小 API、MVC、Blazor 等)都會(huì)對(duì)此功能做出反應(yīng)并按預(yù)期中斷執(zhí)行。
只有在以下情況下才會(huì)驗(yàn)證防偽令牌:

  • 端點(diǎn)包含實(shí)現(xiàn)了 IAntiforgeryMetadata 接口的元數(shù)據(jù),其中
    RequiresValidation=true。
  • 與端點(diǎn)關(guān)聯(lián)的 HTTP 方法是相關(guān) HTTP 方法(不是 TRACE、OPTIONS、HEAD、GET)。
  • 請(qǐng)求與有效端點(diǎn)相關(guān)聯(lián)。

請(qǐng)注意,為了避免在用戶未經(jīng)身份驗(yàn)證時(shí)無意中讀取表單數(shù)據(jù),防偽中間件必須在身份驗(yàn)證和授權(quán)中間件之后運(yùn)行 。

API 編寫

最小 API 的防偽集成
現(xiàn)在默認(rèn)情況下,接受表單數(shù)據(jù)的最小 API 需要防偽令牌驗(yàn)證。
在下面的代碼示例中:

  • 防偽服務(wù)在 DI 中注冊(cè),因此防偽中間件會(huì)自動(dòng)啟用。
  • 提供了兩個(gè)端點(diǎn)用于顯示表單:/antiforgery:會(huì)渲染一個(gè)帶有隱藏防偽令牌字段的表單;/no-antiforgery:則渲染一個(gè)沒有防偽令牌字段的表單。
  • /todo 端點(diǎn)處理表單中的 Todo 對(duì)象,并自動(dòng)要求防偽令牌驗(yàn)證。
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder();

builder.Services.AddAntiforgery();

var app = builder.Build();

app.MapGet("/antiforgery", (HttpContext context, IAntiforgery antiforgery) =>
{
    var token = antiforgery.GetAndStoreTokens(context);
    var html = $"""
        <html>
            <body>
                <form action="/todo" method="POST" enctype="multipart/form-data">
                    <input name="{token.FormFieldName}" type="hidden" value="{token.RequestToken}" />
                    <input type="text" name="name" />
                    <input type="date" name="dueDate" />
                    <input type="checkbox" name="isCompleted" />
                    <input type="submit" />
                </form>
            </body>
        </html>
    """;
    return Results.Content(html, "text/html");
});

app.MapGet("/no-antiforgery", () =>
{
    var html = """
        <html>
            <body>
                <form action="/todo" method="POST" enctype="multipart/form-data">
                    <input type="text" name="name" />
                    <input type="date" name="dueDate" />
                    <input type="checkbox" name="isCompleted" />
                    <input type="submit" />
                </form>
            </body>
        </html>
    """;
    return Results.Content(html, "text/html");
});

app.MapPost("/todo", ([FromForm] Todo todo) => Results.Ok(todo));

app.Run();

class Todo
{
    public string Name { get; set; }
    public bool IsCompleted { get; set; }
    public DateTime DueDate { get; set; }
}

/antiforgery 提交表單將會(huì)得到一個(gè)成功的響應(yīng)。另一方面,在 /no-antiforgery 提交表單將在運(yùn)行時(shí)產(chǎn)生異常,因?yàn)闆]有提供有效的防偽令牌。在 Production 環(huán)境中,這將生成一個(gè)日志而不是拋出異常:

Microsoft.AspNetCore.Http.BadHttpRequestException: Invalid antiforgery token found when reading parameter "Todo todo" from the request body as form.
An unhandled exception has occurred while executing the request.
Microsoft.AspNetCore.Http.BadHttpRequestException: Invalid antiforgery token found when reading parameter "Todo todo" from the request body as form.
 ---> Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The required antiforgery request token was not provided in either form field "__RequestVerificationToken" or header value "RequestVerificationToken".
   at Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery.ValidateRequestAsync(HttpContext httpContext)
   at Microsoft.AspNetCore.Antiforgery.Internal.AntiforgeryMiddleware.InvokeAwaited(HttpContext context)

Native AOT

請(qǐng)求委托生成器支持?jǐn)r截器功能

.NET 8 Preview 3 中引入的請(qǐng)求委托生成器已更新為使用新的 C# 12 攔截器編譯器功能,以支持在運(yùn)行時(shí)使用靜態(tài)生成的變體攔截對(duì)最小 API 的 Map 操作方法的調(diào)用。 由于這個(gè)變化,用戶可以期望在啟用 PublishAot 編譯中看到應(yīng)用程序的啟動(dòng)性能有所提高。
下表概述了啟動(dòng)時(shí)間的變化情況(即處理在應(yīng)用程序中所有端點(diǎn)所需的時(shí)間)在三種情況下的變化:

  • 基線,端點(diǎn)的 RequestDelegates 通過反射和動(dòng)態(tài)代碼生成在運(yùn)行時(shí)生成。在編譯時(shí)沒有攔截器功能生成的端點(diǎn),是 Preview 3 到 Preview 6 中的默認(rèn)設(shè)置。
  • 在編譯時(shí)生成的端點(diǎn),使用了攔截器功能 ,是 Preview 7 中的默認(rèn)設(shè)置。
迭代 基線(運(yùn)行時(shí)生成的端點(diǎn)) 請(qǐng)求委托生成器(無攔截器) 請(qǐng)求委托生成器(帶攔截器)
1 716.2313毫秒 372.5172毫秒 31.5255毫秒
2 747.279毫秒 355.1435毫秒 64.188毫秒
3 730.975毫秒 350.5353毫秒 32.9315毫秒
4 729.2775毫秒 345.8684毫秒 34.1169毫秒
5 711.0555毫秒 351.2683毫秒 38.7152毫秒

.NET 8 Preview 7 中的 ASP.NET Core 更新,.net,asp.net,c#

Full TrimMode 用于啟用修剪功能編譯的 Web 項(xiàng)目

在此預(yù)覽版中,我們引入了一項(xiàng)重大變更將影響通過 PublishTrimmed=true 啟用了裁剪的 Web 項(xiàng)目。 在此版本之前,項(xiàng)目默認(rèn)使用 partial 的 TrimMode。未來,所有面向 .NET 8 或更高版本的項(xiàng)目都將啟用 TrimMode=full。有關(guān)此重大變更的更多信息,請(qǐng)參閱公告。

WebApplication.CreateEmptyBuilder

我們添加了一個(gè)新的 WebApplicationBuilder 工廠方法,用于構(gòu)建僅包含必要功能的小型應(yīng)用程序:WebApplication.CreateEmptyBuilder(WebApplicationOptions options)。此 WebApplicationBuilder 是沒有內(nèi)置行為的。您的應(yīng)用程序?qū)H包含您配置的服務(wù)和中間件。

以下是使用此 API 創(chuàng)建小型 Web 應(yīng)用程序的示例:

var builder = WebApplication.CreateEmptyBuilder(new WebApplicationOptions());
builder.WebHost.UseKestrelCore();

var app = builder.Build();

app.Use(async (context, next) =>
{
    await context.Response.WriteAsync("Hello, World!");
    await next(context);
});

Console.WriteLine("Running...");
app.Run();

在 linux-x64 計(jì)算機(jī)上使用 .NET 8 Preview 7 通過 Native AOT 發(fā)布此代碼會(huì)生成約 8.5 MB 的自包含本機(jī)可執(zhí)行文件。

Blazor

防偽集成

Blazor 端點(diǎn)現(xiàn)在默認(rèn)需要防偽保護(hù)。您可以使用新的防偽中間件啟用防偽支持,并使用 AntiforgeryToken 組件為渲染的表單生成令牌。EditForm 組件將自動(dòng)為您添加防偽令牌。

在 Blazor 組件頁面中使用 [RequireAntiforgeryToken] 屬性來指示組件是否需要防偽投影。 例如,您可以像這樣為頁面禁用防偽要求(不建議?。?/p>

@using Microsoft.AspNetCore.Antiforgery;
@attribute [RequireAntiforgeryToken(required: false)]

服務(wù)器端表單處理改進(jìn)

現(xiàn)在,您可以在使用服務(wù)器端渲染且不使用 EditForm 時(shí)在 Blazor 中構(gòu)建標(biāo)準(zhǔn) HTML 表單。只需使用普通 HTML form 標(biāo)簽創(chuàng)建表單,并指定 @onsubmit 處理程序來處理提交的表單請(qǐng)求。

<form method="post" @formname="contact" @onsubmit="AddContact">
    <div>
        <label for="name">Name</label>
        <InputText id="name" @bind-Value="NewContact.Name" />
    </div>
    <div>
        <label for="email">Email</label>
        <InputText id="email" @bind-Value="NewContact.Email" />
    </div>
    <div>
        <InputCheckbox id="send-me-deals" @bind-Value="NewContact.SendMeDeals" />
        <label for="send-me-deals">Send me deals</label>
    </div>
    <button>Submit</button>
    <AntiforgeryToken />
</form>

@code {
    [SupplyParameterFromForm]
    public Contact NewContact { get; set; } = new();

    public class Contact
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public bool SendMeDeals { get; set; }
    }

    private async Task AddContact()
    {
        // Add contact...
        NewContact = new();
    }
}

現(xiàn)在,所有服務(wù)器端渲染的表單都需要一個(gè)名稱,該名稱用于將提交的請(qǐng)求映射到相應(yīng)的表單處理程序方法和模型綁定。 要指定普通 HTML 表單的名稱,請(qǐng)使用新的 @formname 屬性。 使用 EditForm 時(shí),請(qǐng)使用 FormName 參數(shù)指定名稱。

默認(rèn)情況下,表單名稱必須是唯一的,但您可以使用 FormMappingScope 組件定義表單名稱的范圍。

<FormMappingScope Name="parent-context">
    <ComponentWithFormBoundParameter />
</FormMappingScope>

基于 InputBase<TValue> 的輸入將生成與 Blazor 用于模型綁定的名稱相匹配的表單值名稱。您可以使用 [SupplyParameterFromForm] 上的 Name 屬性指定 Blazor 用于將表單數(shù)據(jù)綁定到模型的名稱。您還可以使用 Handler 屬性指定要綁定其數(shù)據(jù)的表單的名稱(在早期預(yù)覽中,Name 屬性用于此目的)。

要將表單分解為多個(gè)子組件,請(qǐng)從 Editor<T> 派生子組件。這將確保您的子組件根據(jù)模型生成正確的表單字段名稱。

Index.razor

<EditForm Model="Customer" method="post" OnSubmit="DisplayCustomer" FormName="customer">
    <div>
        <label>Name</label>
        <InputText @bind-Value="Customer.Name" />
    </div>
    <AddressEditor @bind-Value="Customer.BillingAddress" />
    <button>Send</button>
</EditForm>

@if (submitted)
{
    <!-- Display customer data -->
    <h3>Customer</h3>
    <p>Name: @Customer.Name</p>
    <p>Street: @Customer.BillingAddress.Street</p>
    <p>City: @Customer.BillingAddress.City</p>
    <p>State: @Customer.BillingAddress.State</p>
    <p>Zip: @Customer.BillingAddress.Zip</p>
}

@code {
    public void DisplayCustomer()
    {
        submitted = true;
    }

    [SupplyParameterFromForm] Customer? Customer { get; set; }

    protected override void OnInitialized() => Customer ??= new();

    bool submitted = false;
    public void Submit() => submitted = true;
}

AddressEditor.razor

@inherits Editor<Address>

<div>
    <label for="street">Street</label>
    <InputText id="street" @bind-Value="Value.Street" />
</div>
<div>
    <label for="state">State</label>
    <InputText id="state" @bind-Value="Value.State" />
</div>
<div>
    <label id="city">City</label>
    <InputText for="city" @bind-Value="Value.City" />
</div>
<div>
    <label for="zip">Zip</label>
    <InputText id="zip" @bind-Value="Value.Zip" />
</div>

Blazor 中的模型綁定現(xiàn)在支持綁定到以下附加類型:

  • 遞歸類型
  • 帶有構(gòu)造函數(shù)的類型
  • 枚舉

您現(xiàn)在還可以使用 [DataMember][IgnoreDataMember] 屬性來自定義您正在編寫的類型的模型綁定 。 您可以使用這些屬性來重命名屬性、忽略屬性以及根據(jù)需要標(biāo)記屬性。 調(diào)用 AddRazorComponents 時(shí),可以從 RazorComponentOptions 獲得其他模型綁定選項(xiàng)。

Auto 渲染模式

Blazor Web 應(yīng)用程序的新 Auto 交互式渲染模式將 ServerWebAssembly 渲染模式的優(yōu)勢(shì)結(jié)合到一個(gè)動(dòng)態(tài)選項(xiàng)中。如果 .NET WebAssembly 運(yùn)行時(shí)可以快速加載(100 毫秒內(nèi)),則 Auto 渲染模式將使用基于 WebAssembly 的渲染。這種情況通常發(fā)生在當(dāng)運(yùn)行時(shí)之前已下載并緩存或使用高速網(wǎng)絡(luò)時(shí)。否則,當(dāng) .NET WebAssembly 運(yùn)行時(shí)在后臺(tái)下載時(shí),Auto 渲染模式會(huì)回退到使用 Server 渲染模式。

如果您要使用 Auto 渲染模式,請(qǐng)?jiān)诮M件實(shí)例上指定 @rendermode="@RenderMode.Auto" 屬性,或在組件定義上指定 @attribute [RenderModeAuto]。請(qǐng)注意,該組件需要設(shè)置為從服務(wù)器和瀏覽器運(yùn)行,因?yàn)樗仨毼挥谀目蛻舳隧?xiàng)目中,并且它的實(shí)現(xiàn)不得與 ServerWebAssembly 綁定。請(qǐng)查看 Blazor Auto 渲染模式示例,了解如何正確設(shè)置。

注冊(cè) root-level 級(jí)聯(lián)值

在 Blazor 中,級(jí)聯(lián)值是一種便捷的方式,可以將狀態(tài)提供給組件層次結(jié)構(gòu)的子樹?,F(xiàn)在,您可以注冊(cè) root-level 級(jí)聯(lián)值,以便整個(gè)組件層次結(jié)構(gòu)都可以使用它們。

// 注冊(cè)固定級(jí)聯(lián)值
services.AddCascadingValue(sp => new MyCascadedThing { Value = 123 });

// 按名稱注冊(cè)固定級(jí)聯(lián)值
services.AddCascadingValue("thing", sp => new MyCascadedThing { Value = 123 });

// 使用 CascadingValueSource<TValue> 注冊(cè)級(jí)聯(lián)值
services.AddCascadingValue(sp =>
{
    var thing = new MyCascadedThing { Value = 456 };
    var source = new CascadingValueSource<MyCascadedThing>(thing, isFixed: false);
    return source;
});

改進(jìn)了交互式組件與服務(wù)器端渲染的集成

.NET 8 中的 Blazor 具有先進(jìn)的服務(wù)器端渲染功能,例如增強(qiáng)的導(dǎo)航和表單處理。此預(yù)覽版改進(jìn)了交互式組件與服務(wù)器端渲染的集成。增強(qiáng)的導(dǎo)航、增強(qiáng)的表單處理和流式渲染現(xiàn)在可以添加和刪除交互式組件并對(duì)其進(jìn)行參數(shù)設(shè)置。

Virtualize 的新參數(shù) EmptyContent

Virtualize 組件現(xiàn)在有一個(gè) EmptyContent 屬性,您可以使用該屬性來定義在沒有項(xiàng)目時(shí)或當(dāng) ItemsProvider 返回 TotalItemCount 為零時(shí)應(yīng)顯示的內(nèi)容。

感謝 @etemi 的貢獻(xiàn)!

Identity

之前在 .NET 8 Preview 4 中,我們添加了新的 Identity API 端點(diǎn)來注冊(cè)和登錄用戶,以簡化自托管身份管理,使得在單頁應(yīng)用程序 (SPA) 和 Blazor 應(yīng)用程序中實(shí)現(xiàn)和自定義 identity 更加容易。默認(rèn)體驗(yàn)是基于 cookie 的,因此它“僅適用于”單域應(yīng)用程序。對(duì)于需要令牌的場(chǎng)景,例如從移動(dòng)客戶端訪問您的 Web 應(yīng)用程序,我們現(xiàn)在提供對(duì)“內(nèi)置”令牌的支持。這些令牌是自包含的,并使用與 cookie 身份驗(yàn)證相同的技術(shù)來生成。值得注意的是,這些不是 JWT,而是自包含的,并且針對(duì)沒有委托身份驗(yàn)證的第一方應(yīng)用程序進(jìn)行了優(yōu)化。在多服務(wù)器環(huán)境中,您需要配置數(shù)據(jù)保護(hù)才能使用共享存儲(chǔ)。

承載令牌身份驗(yàn)證處理程序

新的承載令牌身份驗(yàn)證處理程序與 ASP.NET Core 的內(nèi)置身份驗(yàn)證系統(tǒng)無縫集成。 它可以獨(dú)立使用(不依賴 ASP.NET Core Identity)。它支持發(fā)行和驗(yàn)證令牌。從 Preview 6 開始,它還支持刷新令牌。ASP.NET Core Identity 使用 AddBearerToken 擴(kuò)展將 handler 與 identity 集成。

Identity API 端點(diǎn)

新的 .NET 8 identity API 端點(diǎn)提供基于 HTTP 的 API :

  • 在 identity 系統(tǒng)中注冊(cè)新用戶
  • 登錄并交換經(jīng)過驗(yàn)證的憑據(jù)以獲取 cookie 或令牌
  • 使用刷新令牌刷新憑據(jù),使用戶保持登錄狀態(tài),而無需重新輸入其憑據(jù)
  • 在注冊(cè)過程中確認(rèn)電子郵件以進(jìn)行額外驗(yàn)證
  • 如果未收到或已過期,請(qǐng)重新發(fā)送確認(rèn)電子郵件
  • 重置密碼以支持“忘記密碼”功能

還有一些受保護(hù)的端點(diǎn)需要對(duì)用戶進(jìn)行身份驗(yàn)證:

  • 管理雙因素身份驗(yàn)證(2FA)。
  • 檢索或更新用戶 identity 配置文件中的信息,包括聲明。

入門

David Fowler 的 identity 端點(diǎn)示例展示了如何配置 identity 以使用新的 handler 和端點(diǎn)。 它還包含一個(gè) .http 文件,用于測(cè)試 Visual Studio 內(nèi)的新端點(diǎn)。

首先,啟用新的 handler 并向應(yīng)用添加身份驗(yàn)證和授權(quán)。

builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);
builder.Services.AddAuthorizationBuilder();

下一步:

  • 映射 identity 模型
  • 為 identity 存儲(chǔ)指定 DbContext
  • 選擇使用新端點(diǎn)
builder.Services.AddIdentityCore<MyUser>()
   .AddEntityFrameworkStores<AppDbContext>()
   .AddApiEndpoints();

調(diào)用 Build() 后,將 identity 端點(diǎn)映射到應(yīng)用程序中的路由。

app.MapIdentityApi<MyUser>();

現(xiàn)在您可以將 API 配置為使用 identity。此端點(diǎn)訪問 identity 以返回登錄用戶的名稱,并且僅適用于經(jīng)過身份驗(yàn)證的用戶。

app.MapGet("/", (ClaimsPrincipal user) => $"Hello {user.Identity!.Name}").RequireAuthorization();

示例會(huì)話如下所示:

  1. POST/register 端點(diǎn)以注冊(cè)用戶。
{
    "user" : "test",
    "password" : "@T35t!",
    "email" : "test@notadomain.xyz"
}
  1. POST/login?cookieMode=false&persistCookies=false 端點(diǎn)以登錄用戶。
{
    "user" : "test",
    "password" : "@T35t!"
}
  1. 接收 access_token、expiration 和 refresh_token。
{
    "token_type": "Bearer",
    "access_token": "CfDJ9NHobblyWobblyGobblyGoop...",
    "expires_in": 3600,
    "refresh_token": "TokenBabbelYabbaDabbaDoo..."
}
  1. 通過將請(qǐng)求的 Authentication 標(biāo)頭設(shè)置為 Bearer xxx(其中 xxxaccess_token),使用令牌調(diào)用受保護(hù)的 API。
  2. 當(dāng)用戶的憑據(jù)過期或即將過期時(shí),POST/refresh 端點(diǎn)并傳遞refresh_token。
{
    "refreshToken": "TokenBabbelYabbaDabbaDoo..."
}
  1. 這將生成新的 access_token、expiration 和 refresh_token。

這些新的構(gòu)建模塊可以更輕松地構(gòu)建非委托驗(yàn)證的身份驗(yàn)證程序。

單頁應(yīng)用程序

新的 Visual Studio 模板

我們一直與 Visual Studio 團(tuán)隊(duì)密切合作,以確保 Visual Studio JavaScript 和 TypeScript 開發(fā)體驗(yàn)?zāi)芙o ASP.NET Core 開發(fā)人員帶來出色的體驗(yàn)。Visual Studio 包含適用于 Angular、React 和 Vue 的新項(xiàng)目模板,這些模板基于新的 JavaScript 項(xiàng)目系統(tǒng) (.esproj) 構(gòu)建,并與 ASP.NET Core 后端項(xiàng)目集成。
.NET 8 Preview 7 中的 ASP.NET Core 更新,.net,asp.net,c#
這些 Visual Studio 模板為 .NET 和 JavaScript 開發(fā)人員提供了豐富的功能:

  • 快速入門 JavaScript 前端和 ASP.NET Core 后端。
  • 及時(shí)了解最新的前端框架版本。
  • 與最新的前端框架命令行工具集成。
  • JavaScript 和 TypeScript 的模板。
  • 豐富的 JavaScript 和 TypeScript 代碼編輯經(jīng)驗(yàn)。
  • 清晰的前端和后端項(xiàng)目分離。
  • 將 JavaScript 構(gòu)建工具與您的 .NET 構(gòu)建集成。
  • npm 依賴管理 UI。
  • 與 Visual Studio Code 調(diào)試和啟動(dòng)配置兼容。
  • 使用您最喜歡的 JavaScript 測(cè)試框架在測(cè)試資源管理器中運(yùn)行前端單元測(cè)試。

為了專注于為前端 JavaScript 框架與 ASP.NET Core 的使用提供最佳的開發(fā)體驗(yàn),我們從 .NET 8 SDK 中刪除了現(xiàn)有的 Angular 和 React 模板,轉(zhuǎn)而采用新的 Visual Studio 模板。 我們正在與 Visual Studio 團(tuán)隊(duì)合作,進(jìn)一步改進(jìn)帶有 ASP.NET Core 模板的新 Visual Studio JavaScript,以支持跨平臺(tái)開發(fā)、與 ASP.NET Core 客戶端 Web 資產(chǎn)集成、簡化發(fā)布并面向所有受支持的 .NET 版本。

您可以通過安裝最新的 Visual Studio 預(yù)覽版,然后按照 Visual Studio 文檔中的 Angular、React 和 Vue 教程中的任意一個(gè)來嘗試新的 Visual Studio JavaScript 模板。 如果您對(duì)新模板有反饋,可以使用 Visual Studio 發(fā)送反饋工具與我們分享。

提供反饋

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

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

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

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

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

相關(guān)文章

  • 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è)為其他對(duì)象提供服務(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 文件夾。請(qǐng)閱讀我們之前討論過ASP.NET Core 請(qǐng)求處理管道的文章。在本文的最后,您將了解 wwwroot 文件夾及其需求以及如何在 ASP.NET Core 應(yīng)用程序中進(jìn)行配置。 ASP.NET Core 中的 wwwroot 文件夾是什么? 默認(rèn)情況下,ASP.NET Core 應(yīng)用

    2024年02月04日
    瀏覽(27)
  • 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)該在源代碼中存儲(chǔ)密碼和其他的敏感數(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腳本代碼會(huì)被執(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 等需要在控制臺(tái)內(nèi)現(xiàn)實(shí)界面的軟件的話,其實(shí)使用 Process 類型去啟動(dòng)相應(yīng)程序就夠了。而這次的需求則需要考慮用戶會(huì)做相關(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)
  • Asp.Net VS ASP.NET Core 請(qǐng)求管道

    Asp.Net VS ASP.NET Core 請(qǐng)求管道

    參考鏈接 ASP.NET CORE 啟動(dòng)過程及源碼解讀 請(qǐng)求進(jìn)入Asp.Net工作進(jìn)程后,由進(jìn)程創(chuàng)建HttpWorkRequest對(duì)象,封裝此次請(qǐng)求有關(guān)的所有信息,然后進(jìn)入HttpRuntime類進(jìn)行進(jìn)一步處理。HttpRuntime通過請(qǐng)求信息創(chuàng)建HttpContext上下文對(duì)象,此對(duì)象將貫穿整個(gè)管道,直到響應(yīng)結(jié)束。同時(shí)創(chuàng)建或從應(yīng)用

    2024年02月04日
    瀏覽(100)
  • ASP.NET Core MVC -- 將視圖添加到 ASP.NET Core MVC 應(yīng)用

    ASP.NET Core MVC -- 將視圖添加到 ASP.NET Core MVC 應(yīng)用

    右鍵單擊“視圖”文件夾,然后單擊“添加”“新文件夾”,并將文件夾命名為“HelloWorld”。 右鍵單擊“Views/HelloWorld”文件夾,然后單擊“添加”“新項(xiàng)”。 在“添加新項(xiàng) - MvcMovie”對(duì)話框中: 在右上角的搜索框中,輸入“視圖” 選擇“Razor 視圖 - 空” 保持“名稱”框的

    2024年02月13日
    瀏覽(127)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包