C# C#  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  ·  👥 16 прошли

ASP.NET Core

Охватывает конвейер ASP.NET Core, middleware, конечные точки, валидацию и эксплуатационные свойства веб-приложения. Задания проверяют порядок компонентов, состояние ответа, коды HTTP, потоковую выдачу, кэширование и корректное завершение.

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 30
В каком порядке выполняется код вокруг await next()?
C#
app.Use(async (context, next) =>
{
    Log("before");
    await next(context);
    Log("after");
});
Вопрос 2 из 30
Что такое short-circuit?
C#
app.Use(async (context, next) =>
{
    if (!context.Request.Headers.ContainsKey("X-Key"))
    {
        context.Response.StatusCode = 401;
        return; // short-circuit
    }
    await next(context);
});
Вопрос 3 из 30
Что произойдёт с middleware после app.Run?
C#
app.Run(async context =>
    await context.Response.WriteAsync("done"));

app.Use(async (context, next) =>
    await next(context));
Вопрос 4 из 30
Как обычно упорядочить routing, authentication и authorization?
Вопрос 5 из 30
Почему exception handler должен стоять рано?
C#
app.UseExceptionHandler("/error");
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
Вопрос 6 из 30
Каков lifetime conventional middleware, созданного через UseMiddleware<T>?
C#
public sealed class RequestAuditMiddleware(RequestDelegate next)
{
    private string? _currentPath;

    public Task InvokeAsync(HttpContext context) => next(context);
}
Вопрос 7 из 30
Что не так с полем _currentUser?
C#
public async Task InvokeAsync(HttpContext context)
{
    _currentUser = context.User.Identity?.Name;
    await _next(context);
}
Вопрос 8 из 30
Когда IMiddleware полезен?
Вопрос 9 из 30
Почему нельзя менять headers после начала response?
C#
await next(context);
context.Response.Headers["X-Request-Id"] = requestId;
Вопрос 10 из 30
Что нужно для повторного чтения Request.Body?
Вопрос 11 из 30
Что даёт Results<Ok<ProductDto>, NotFound> в minimal API?
C#
app.MapGet("/products/{id:int}",
    async Task<Results<Ok<ProductDto>, NotFound>> (int id, Catalog catalog) =>
        await catalog.FindAsync(id) is { } p
            ? TypedResults.Ok(p)
            : TypedResults.NotFound());
Вопрос 12 из 30
Как вернуть отсутствие ресурса?
Вопрос 13 из 30
Зачем передавать HttpContext.RequestAborted?
C#
app.MapGet("/products/{id:int}", async (
    int id, Catalog catalog, HttpContext context) =>
{
    var product = await catalog.FindAsync(id, context.RequestAborted);
    return product is null ? Results.NotFound() : Results.Ok(product);
});
Вопрос 14 из 30
Что делает route constraint {id:int}?
Вопрос 15 из 30
Почему domain entity не стоит возвращать напрямую?
C#
var dto = new ProductDto(entity.Id, entity.Name, entity.Price);
return TypedResults.Ok(dto);
Вопрос 16 из 30
Чем валидация DTO отличается от доменного инварианта?
Вопрос 17 из 30
Какой статус подходит для синтаксически неверного поля?
C#
if (!validator.TryValidate(command, out var errors))
    return Results.ValidationProblem(errors);
return Results.Ok();
Вопрос 18 из 30
Что делать с неизвестным enum-числом в JSON?
C#
if (!Enum.IsDefined(command.Status))
    return Results.ValidationProblem(new Dictionary<string, string[]>
    {
        ["status"] = ["Unsupported status value."]
    });
Вопрос 19 из 30
Почему ограничение размера тела нужно до полной десериализации?
Вопрос 20 из 30
Как обработать конфликт версии optimistic concurrency?
C#
if (command.Version != entity.Version)
    return Results.Conflict(new ProblemDetails
    {
        Title = "The resource has changed.",
        Extensions = { ["currentVersion"] = entity.Version }
    });
Вопрос 21 из 30
Что ловит WebApplicationFactory-тест лучше модульного теста контроллера?
C#
await using var factory = new WebApplicationFactory<Program>();
var client = factory.CreateClient();
var response = await client.PostAsJsonAsync("/orders", invalidCommand);
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
Вопрос 22 из 30
Как проверить порядок middleware?
C#
Assert.Equal(
    ["A:before", "B:before", "endpoint", "B:after", "A:after"],
    recorder.Events);
Вопрос 23 из 30
Какие HTTP-метрики базовые?
Вопрос 24 из 30
Что не стоит писать в request log?
C#
log.LogInformation(
    "HTTP {Method} {Route} -> {Status} in {Elapsed}ms trace={TraceId}",
    context.Request.Method, routePattern, context.Response.StatusCode,
    elapsed, Activity.Current?.TraceId);
Вопрос 25 из 30
Как проверить ProblemDetails?
Вопрос 26 из 30
Почему .Result в action опасен?
C#
var product = catalog.LoadAsync(id).Result;
return Results.Ok(product);
Вопрос 27 из 30
Когда response streaming полезен?
Вопрос 28 из 30
Что должен учитывать кэширование ответа?
Вопрос 29 из 30
Зачем ограничитель частоты запросов у входной точки?
C#
builder.Services.AddRateLimiter(options =>
    options.AddFixedWindowLimiter("login", o =>
    {
        o.PermitLimit = 5;
        o.Window = TimeSpan.FromMinutes(1);
    }));
Вопрос 30 из 30
Что важно при graceful shutdown?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe)

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу