Новые возможности 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]
теперь поддерживает выделение синтаксиса маршрутов для визуализации структуры шаблона маршрута:
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 генератор кода используется для создания объявления 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