Получаете 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 чтобы мы могли перенести это в ядро.