Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1185. #ЧтоНовенького Превью Обновлений ASP.NET Core в .NET 7 Вышло уже 3 превью новинок в ASP.NET Core в новой версии .NET 7, которая должна выйти в ноябре. Вот самое интересное, на мой взгляд. 1. Внедрение сервисов в методах контроллера Теперь не обязательно использовать атрибут [FromServices], сервис будет подставляться автоматически:
public class MyController : ControllerBase
{
  public ActionResult Get(MyService service) => Ok();
}
Это можно отключить в настройках:
Services.Configure<ApiBehaviorOptions>(opt =>
{
  opt.DisableImplicitFromServicesParameters = true;
})

2. Описания конечных точек В минимальных API теперь можно добавить аннотации для спецификаций OpenAPI. Либо через методы расширения:
app.MapGet("/hello", () => ...)
  .WithDescription("Hello request");

Либо через атрибуты:
app.MapGet("/hello", [EndpointSummary("Hello request")]() => ...);

3. Привязка массивов и StringValues Теперь можно выполнять связывание из заголовков HTTPS и строки запроса в массивы примитивных типов, строк или в StringValues:
// GET /tags?q=1&q=2
app.MapGet("/tags", (int[] q) => $"1:{q[0]}, 2:{q[1]}");

// GET /tags?names=john&names=jack
app.MapGet("/tags", (string[] names) => $"1:{names[0]}, 2:{names[1]}");

app.MapGet("/tags", (StringValues names) => $"1:{names[0]}, 2:{names[1]} ");

4. Фильтры обработчиков маршрутов Фильтры выполняются перед основной логикой обработчика маршрута и могут использоваться для проверки и изменения параметров обработчика или перехвата выполнения обработчика.
app.MapGet("/hello/{name}", HelloName)
  .AddFilter(async (сontext, next) =>
  {
    return await next(сontext);
  });
Это похоже на фильтры промежуточного ПО. Но теперь их можно «навесить» на отдельные конечные точки. Подробнее про них рассказывает Ник Чапсас https://youtu.be/Kt9TiXrwIp4 5. Привязка с использованием TryParse Теперь вы можете привязывать значения параметров действия контроллера с помощью метода TryParse. В примере ниже контроллер привязывает данные из строки запроса с помощью метода TryParse в типе параметра:
public class TryParseController : ControllerBase
{
  // GET /tryparse?data=MyName
  [HttpGet]
  public ActionResult Get([FromQuery]CustomParse data)
  {
    …
  }

  public class CustomParse
  {
    public string? Name { get; set; }

    public static bool TryParse(string s, out CustomParse result)
    {
      if (s is null) 
      {
        result = default;
        return false;
      }

      result = new CustomParse { Name = s };
      return true;
    }
  }
}

Источники: - devblogs.microsoft.com/dotnet/…review-2 - devblogs.microsoft.com/dotnet/…review-3