Новые возможности ASP.NET Core 10.0
В этой статье рассматриваются наиболее значительные изменения в ASP.NET Core 10.0 со ссылками на соответствующую документацию.
Эта статья будет обновлена по мере доступности новых предварительных выпусков. Пока эта страница не обновлена, см. страницу анонса Asp.Net Core.
Blazor
В этом разделе описываются новые функции для Blazor.
параметр QuickGridRowClass
Примените класс стилей оформления к строке сетки, основанной на элементе строки, с помощью нового параметра RowClass
. В следующем примере метод GetRowCssClass
вызывается для каждой строки для условного применения класса таблицы стилей на основе элемента строки:
<QuickGrid ... RowClass="GetRowCssClass">
...
</QuickGrid>
@code {
private string GetRowCssClass(MyGridItem item) =>
item.IsArchived ? "row-archived" : null;
}
Дополнительные сведения см. в ASP.NET Core Blazor "QuickGrid" компоненте.
скрипт Blazor как статический веб-ресурс
В предыдущих выпусках .NET скрипт Blazor обслуживается из внедренного ресурса в общей платформе ASP.NET Core. В .NET версии 10 или более поздней скрипт Blazor предоставляется как статический веб-ресурс с автоматическим сжатием и уникальными идентификаторами.
Дополнительные сведения см. в следующих ресурсах:
Основные сведения о шаблоне маршрута
Атрибут [Route]
теперь поддерживает выделение синтаксиса маршрутов для визуализации структуры шаблона маршрута:
Blazor Hybrid
В этом разделе описываются новые функции для Blazor Hybrid.
Новая .NET MAUIBlazor Hybrid со статьёй и примером ASP.NET Core Blazor Web App и Identity
Добавлена новая статья и пример приложения для .NET MAUIBlazor Hybrid и веб-приложения с помощью ASP.NET Core Identity.
Дополнительные сведения см. в следующих ресурсах:
- .NET MAUI Blazor Hybrid и веб-приложение с ASP.NET Core Identity
-
MauiBlazorWebIdentity
пример приложения (репозиторийdotnet/blazor-samples
GitHub)
SignalR
В этом разделе описываются новые функции для SignalR.
Минимальные API
В этом разделе описываются новые функции для минимальных API.
OpenAPI
В этом разделе описываются новые возможности OpenAPI.
Поддержка OpenAPI 3.1
ASP.NET Core добавила поддержку создания документов OpenAPI версии 3.1 в .NET 10. Несмотря на незначительное увеличение версии, OpenAPI 3.1 является значительным обновлением спецификации OpenAPI, в частности с полной поддержкой черновика схемы JSON 2020-12.
Некоторые изменения, которые вы увидите в созданном документе OpenAPI, включают:
- Типы nullable больше не имеют свойства
nullable: true
в схеме. - Вместо свойства
nullable: true
они имеют ключевое словоtype
, значение которого является массивом, который включаетnull
в качестве одного из типов.
При использовании этой функции версия OpenAPI по умолчанию для созданных документов3.1
. Версию можно изменить явным образом, задав свойство OpenApiVersion OpenApiOptions в параметре делегата configureOptions
AddOpenApi.
builder.Services.AddOpenApi(options =>
{
// Specify the OpenAPI version to use.
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0;
});
При создании документа OpenAPI во время сборки можно выбрать версию OpenAPI, задав --openapi-version
в элементе OpenApiGenerateDocumentsOptions
MSBuild.
<!-- Configure build-time OpenAPI generation to produce an OpenAPI 3.0 document. -->
<OpenApiGenerateDocumentsOptions>--openapi-version OpenApi3_0</OpenApiGenerateDocumentsOptions>
Поддержка OpenAPI 3.1 была главным образом добавлена в следующий PR.
Изменения, нарушающие совместимость в OpenAPI 3.1
Для поддержки OpenAPI 3.1 требуется обновление базовой библиотеки OpenAPI.NET до новой основной версии 2.0. Эта новая версия содержит некоторые изменения, которые могут нарушить совместимость с предыдущей версией. Разрушающие изменения могут повлиять на приложения, если они используют трансформеры документов, операций или схем.
Одним из наиболее значительных изменений является то, что класс OpenApiAny
был удален в пользу использования JsonNode
напрямую. Для использования OpenApiAny
необходимо обновить преобразователи, использующие JsonNode
. В следующем диффе показаны изменения преобразователя схемы с .NET 9 до .NET 10:
options.AddSchemaTransformer((schema, context, cancellationToken) =>
{
if (context.JsonTypeInfo.Type == typeof(WeatherForecast))
{
- schema.Example = new OpenApiObject
+ schema.Example = new JsonObject
{
- ["date"] = new OpenApiString(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")),
+ ["date"] = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"),
- ["temperatureC"] = new OpenApiInteger(0),
+ ["temperatureC"] = 0,
- ["temperatureF"] = new OpenApiInteger(32),
+ ["temperatureF"] = 32,
- ["summary"] = new OpenApiString("Bracing"),
+ ["summary"] = "Bracing",
};
}
return Task.CompletedTask;
});
Обратите внимание, что эти изменения необходимы даже при настройке только версии OpenAPI до версии 3.0.
OpenAPI в Yaml
ASP.NET теперь поддерживает обслуживание созданного документа OpenAPI в формате YAML. YAML может быть более кратким, чем JSON, устраняя фигурные скобки и кавычки, когда их можно вывести. YAML также поддерживает многострочный формат строк, которые могут быть полезны для длинных описаний.
Чтобы настроить приложение для обслуживания созданного документа OpenAPI в формате YAML, укажите конечную точку в вызове MapOpenApi с суффиксом "yaml" или ".yml", как показано в следующем примере:
app.MapOpenApi("/openapi/{documentName}.yaml");
Поддержка:
- В настоящее время YAML доступен только для openAPI, обслуживаемого из конечной точки OpenAPI.
- Создание документов OpenAPI в формате YAML во время сборки будет добавлено в будущей предварительной версии.
См. этот PR, добавивший поддержку представления сгенерированного документа OpenAPI в формате YAML.
Описание ответа в ProducesResponseType
Атрибуты ProducesAttribute, ProducesResponseTypeAttribute, и ProducesDefaultResponseType теперь принимают необязательный строковый параметр Description
, который задает описание ответа. Ниже приведен пример:
[HttpGet(Name = "GetWeatherForecast")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "The weather forecast for the next 5 days.")]
public IEnumerable<WeatherForecast> Get()
{
А также сгенерированный OpenAPI:
"responses": {
"200": {
"description": "The weather forecast for the next 5 days.",
"content": {
вклад сообществаСандер тен Бринке🙏
Проверка подлинности и авторизация
В этом разделе описываются новые функции проверки подлинности и авторизации.
Разное
В этом разделе описаны другие новые функции в ASP.NET Core 10.0.
Улучшена поддержка тестирования приложений с помощью инструкций верхнего уровня
В .NET 10 теперь улучшена поддержка тестирования приложений, использующих инструкции верхнего уровня . Ранее разработчикам пришлось вручную добавить public partial class Program
в файл Program.cs
, чтобы тестовый проект мог ссылаться на Program class
.
public partial class Program
требуется, так как оператор верхнего уровня в C# 9 создал Program class
, объявленный как внутренний.
В .NET 10 source generator используется для создания объявления public partial class Program
, если программист не объявил его явно. Кроме того, был добавлен анализатор, чтобы определить, когда public partial class Program
объявлен явным образом, и рекомендовать разработчику его удалить.
Следующие PR-ы, внесшие вклад в эту функцию:
Определение локального URL-адреса с помощью RedirectHttpResult.IsLocalUrl
Используйте новый вспомогательный метод RedirectHttpResult.IsLocalUrl(url)
, чтобы определить, является ли URL-адрес локальным. URL-адрес считается локальным, если выполняются следующие условия:
- В нём отсутствуют раздел хост или авторизация.
- Он имеет абсолютный путь.
URL-адреса с виртуальными путями "~/"
также являются локальными.
IsLocalUrl
полезно для проверки URL-адресов перед перенаправлением на них, чтобы предотвратить атаки открытого перенаправления.
if (RedirectHttpResult.IsLocalUrl(url))
{
return Results.LocalRedirect(url);
}
Спасибо @martincostello за этот вклад!
Связанное содержимое
ASP.NET Core