Установка Result в контексте метода ChallengeAsync в фильтре аутентификации

Этот вопрос связан с ответом, который я далВот, Комментарий ОП заставил меня задуматься. Я предложил использовать реализацию классаIHttpActionResult как это вChallengeAsync метод фильтра аутентификации.

public Task ChallengeAsync(HttpAuthenticationChallengeContext context,
                                  CancellationToken cancellationToken)
{
    context.Result = new ResultWithChallenge(context.Result);
    return Task.FromResult(0);
}

public class ResultWithChallenge : IHttpActionResult
{
    private readonly IHttpActionResult next;

    public ResultWithChallenge(IHttpActionResult next)
    {
        this.next = next;
    }

    public async Task<HttpResponseMessage> ExecuteAsync(
                                CancellationToken cancellationToken)
    {
        var response = await next.ExecuteAsync(cancellationToken);
        if (response.StatusCode == HttpStatusCode.Unauthorized)
        {
            response.Headers.WwwAuthenticate.Add(
                   new AuthenticationHeaderValue("Basic", "realm=localhost"));
        }

        return response;
    }
}

Вместо этого я могу упроститьChallengeAsync как это.

public Task ChallengeAsync(HttpAuthenticationChallengeContext context,
                             CancellationToken cancellationToken)
{
    var result = await context.Result.ExecuteAsync(cancellationToken);
    if (result.StatusCode == HttpStatusCode.Unauthorized)
    {
        result.Headers.WwwAuthenticate.Add(
                     new AuthenticationHeaderValue("Basic", "realm=localhost"));
    }
    context.Result = new ResponseMessageResult(result);
}

Это спасает меня от создания класса, реализующегоIHttpActionResult но это правильный путь? У меня возникает неприятное ощущение, что это как-то плохо с точки зрения производительности, потому что мне кажется, что я конвертирую результат действия в HttpResponseMessage и обратно в результат действия. Любые указатели на необходимость отдельного класса здесь реализуютIHttpActionResult как то, что я предложил, будет оценено по сравнению с использованием кода выше.

Ответы на вопрос(1)

Ваш ответ на вопрос