Не Делайте Этого В .NET 6, Делайте Вот Так. Окончание
Начало
4. Не используйте костыли для обработки исключений в Blazor Server, используйте компонент ErrorBoundary
Что происходит при возникновении необработанного исключения в Blazor Server? Оно считается фатальным, поскольку «цепь остается в неопределённом состоянии, что может привести к проблемам со стабильностью или безопасностью в Blazor Server». В результате вам может потребоваться разбрасывать повсюду блоки try/catch в качестве превентивной меры или инкапсулировать логику в JavaScript, поскольку код C# после необработанного исключения не будет выполнен.
Не делайте так. Вместо этого используйте новый компонент
ErrorBoundary. Это не глобальный обработчик исключений, но он поможет справиться с непредсказуемым поведением, особенно с компонентами, которые вы не контролируете.<div class="main">Конечно, можно не перехватывать все исключения:
<div class="content px-4">
<ErrorBoundary>
@Body
</ErrorBoundary>
</div>
</div>
<tbody>5. Не используйте подробный логгинг в Server.Kestrel, используйте новые подкатегории
@foreach (var emp in Employees)
{
<ErrorBoundary @key="@emp">
<ChildContent>
<tr>
<td>@emp.Id</td>
<td>@emp.FirstName</td>
<td>@emp.LastName</td>
</tr>
</ChildContent>
<ErrorContent>
Не удалось отобразить #@emp.Id.
</ErrorContent>
</ErrorBoundary>
}
</tbody>
Если я хочу включить подробный логгинг для Kestrel, раньше нужно было использовать
Microsoft.AspNetCore.Server.Kestrel. Это всё ещё существует, но есть и новые подкатегории, которые упрощают жизнь. В дополнение к Server.Kestrel теперь есть Kestrel.BadRequests, Kestrel.Connections, Kestrel.Http2 и Kestrel.Http3. Допустим, вы хотите регистрировать только неверные запросы:{
"Logging": {
"LogLevel": {
"Microsoft.AspNetCore.Server.Kestrel": "Debug"
}
}
}
Не делайте так. Делайте вот так:{
"Logging": {
"LogLevel": {
"Microsoft.AspNetCore.Server.Kestrel.BadRequests": "Debug"
}
}
}
6. Не теряйтесь в скобках, используйте пространства имён уровня файловВ C# 10 представлены пространства имён уровня файлов. Вот обычное объявление класса в C# до версии 10:
namespace SuperheroApp.ModelsТеперь можно убрать скобки в пространстве имён, а также получить все преимущества неизменяемости, использовав записи:
{
public class Superhero
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
}
namespace SuperheroApp.Models;Кстати, о скобках. В C# 10 также введены новые шаблоны свойств. В выражении
public record Superhero(string? FirstName, string? LastName);
switch вместо var tax = sales switchможно использовать более ясный формат:
{
{ Address: { State: "AZ" } } => 1.03M,
{ Address: { State: "FL" } } => 1.07M,
{ Address: { State: "CA" } } => 1.12M
_ => 0
};
var tax = sales switchИсточник: https://www.daveabrock.com/2021/12/08/do-this-not-that-the-net-6-edition/
{
{ Address.State: "AZ" } => 1.03M,
{ Address.State: "FL" } => 1.07M,
{ Address.State: "CA" } => 1.12M
_ => 0
};