Msgstr "Невозможно перенаправить после отправки заголовков HTTP."При возврате HttpResponseMessage с помощью HttpStatusCode.Unauthorized - PullRequest
5 голосов
/ 28 марта 2012

Я использую новую бета-версию Web Api и хочу вернуть

HttpResponseMessage<MyObject>(new MyObject{ MyMessage = "Go Away!" }, HttpStatusCode.Unauthorized)

из одного из моих действий ApiController.

Аутентификация с помощью форм перехватывает ответ,аварийно завершает работу и добавляет ошибку "Cannot redirect after HTTP headers have been sent." и html в ответ.

Обычные методы подавления, такие как this , не работают с Web Api.

Кто-нибудь нашелОбойти это?

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

После просмотра DelegatingHandler я могу получить доступ к HttpResponseMessage, но не имеюИдея, что с этим делать, чтобы FormsAuth не перенаправлял.

Ответы [ 2 ]

2 голосов
/ 01 июня 2012

Я столкнулся с той же проблемой при использовании модуля SuppressFormsAuthenticationRedirectModule Фила Хаака

Мне удалось исправить это в моем случае, очистив ошибку сервера, как показано ниже

private void OnEndRequest(object source, EventArgs args)
{
    var context = (HttpApplication)source;
    var response = context.Response;

    if (context.Context.Items.Contains(SuppressAuthenticationKey))
    {
        context.Server.ClearError(); //Clearing server error

        response.TrySkipIisCustomErrors = true;
        response.ClearContent();
        response.StatusCode = 401;
        response.RedirectLocation = null;
    }
}
0 голосов
/ 20 июня 2012

Привет, поскольку этот вопрос все еще кажется открытым, я подумал, что хотел бы отметить, что в последнем выпуске MVC 4 RC, по-видимому, по умолчанию отключено перенаправление форм. Я немного покопался, отвечая на этот вопрос Запрет FormsAuthenticationModule для перехвата ответов ASP.NET Web API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...