правильный способ для промежуточного программного обеспечения прекратить ответ - PullRequest
0 голосов

Я использую промежуточное ПО и хочу отменить или перенаправить ответ, не заполняя журнал сообщениями об ошибках, на данный момент я не могу найти правильный способ сделать это, у меня есть следующий код, и я недоволен с ним.

internal class MyMiddleware
{

    RequestDelegate _next;
    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task InvokeAsync(HttpContext context)
    {
        if (context.RequestAborted.IsCancellationRequested)
            return _next(context);

        Uri newUrl;

        //some logic
        if (newUrl != null)
        {
            context.Response.StatusCode = StatusCodes.Status307TemporaryRedirect;
            context.Response.Redirect(newUrl.AbsolutePath);
        }
        else
        {
            context.Response.Headers.Clear();
            context.Response.StatusCode = StatusCodes.Status400BadRequest;
            context.Response.Clear();
            context.Abort();
        }

        return _next(context);
    }
}

Промежуточное ПО не вызывает проблем, однако ни перенаправление, ни отмена не дают правильных заголовков и содержимого ответа. как правильно это реализовать?

1 Ответ

0 голосов

ладно, вот и разобрался, как отменить, просто вернуть выполненную задачу и игнорировать _next задачу

    context.Response.StatusCode = 403;
    return Task.CompletedTask;
...