Получаете 406 при использовании OpenRasta HTTPEntity в качестве ответного ответа?

В моем коде обработчика я пытаюсь вернуть ответ на перенаправление с необходимыми заголовками / телом openid, чтобы выполнить перенаправление пользовательского агента для аутентификации, но когда я устанавливаю ответ возврата с HTTPEntity в результате операции, я получаю 406 Неприемлемо для клиента? Что не так с этим? Следующий код не является полным и имеет качество прототипа!

Вот мой код обработчика:

private static OpenIdRelyingParty openid = new OpenIdRelyingParty();
public OperationResult Get(string contentId)
{
   var response = openid.GetResponse();
   Identifier id;
   Identifier.TryParse("https://www.google.com/accounts/o8/id", out id);
   OutgoingWebResponse owr = openid.CreateRequest(id).RedirectingResponse;

   HttpEntity he = new HttpEntity(new HttpHeaderDictionary(owr.Headers), owr.ResponseStream);

   return new OperationResult.SeeOther { ResponseResource = he };

 }

1 ответ

Решение

Мы не поддерживаем IMessage / IHttpEntity / IResponse в качестве типов возврата в данный момент, так что это не сработает (но было бы здорово, если бы это было, и, вероятно, должно).

Проблема сейчас заключается в том, что IRequest / IResponse (и связанные с ним объекты сущностей) контролируются хостинговой средой.

Если вы хотите, чтобы он работал как есть, я бы предложил создать собственный кодек, зарегистрировать его в IHttpEntity (ResourceSpace.Has.ResourcesOfType().WithoutUri.TranscodedBy()) и использовать этот кодек для копирования заголовков и тела на Существующий IResponse, который должен занять у вас 5 LOC.

Я открыл ошибку на https://github.com/openrasta/openrasta-core/issues/33 чтобы мы могли перенести это в ядро.

Другие вопросы по тегам