Я прочитал следующую статью, http://www.paraesthesia.com/archive/2011/01/31.aspx,, которая привела меня к использованию dotPeek в сборке Microsoft.IdentityModel. Что показывает мне, что все сообщение ProcessSignInResponse
делает следующее:
public static void ProcessSignInResponse(SignInResponseMessage signInResponseMessage, HttpResponse httpResponse)
{
if (signInResponseMessage == null)
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("signInResponseMessage");
else if (httpResponse == null)
{
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("httpResponse");
}
else
{
signInResponseMessage.Write(httpResponse.Output);
httpResponse.Flush();
httpResponse.End();
}
}
Метод signInResponseMessage.Write выполняет следующие действия:
public override void Write(TextWriter writer)
{
if (writer == null)
{
throw DiagnosticUtil.ExceptionUtil.ThrowHelperArgumentNull("writer");
}
else
{
this.Validate();
writer.Write(this.WriteFormPost());
}
}
Как вы можете видеть, по сути, все, что выполняется, - это запись содержимого WriteFormPost
в поток ответов.
Так что, как мы говорим, я изменяю свой метод "ProcessSignIn
", чтобы он возвращал HTML для вывода вместо вызова FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse
.
Итак, я существенно изменил свой метод из этого:
public static void ProcessSignIn(SignInRequestMessage signInRequest, HttpResponse httpResponse)
{
FederatedPassiveSecurityTokenServiceOperations.ProcessSignInResponse(signInResponseMessage, httpResponse);
}
Кому:
public static string ProcessSignIn(SignInRequestMessage signInRequest)
{
return signInResponseMessage.WriteFormPost();
}
Конечно, SignInResponseMessage должен был обеспечить более чистый метод возврата только «основного» содержимого того, что вы хотите написать в сообщение формы, но получить
Форма HTML в виде строки, по крайней мере, упрощает изменение результата перед его возвратом клиенту с помощью Response.Write(result)
.