Я пытаюсь написать промежуточное программное обеспечение, которое вызывает следующее промежуточное программное обеспечение, и затем, каким бы ни было тело ответа этого промежуточного программного обеспечения, оно будет изменено моим промежуточным программным обеспечением.
Это то, что метод Configuration()
вStartup
класс выглядит так:
public void Configuration(IAppBuilder app)
{
app.Use<OAuthAuthenticationFailCustomResponse>();
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
Это промежуточное программное обеспечение, написанное мной:
public class OAuthAuthenticationFailCustomResponse : OwinMiddleware
{
public OAuthAuthenticationFailCustomResponse(OwinMiddleware next)
: base(next)
{
}
public async override Task Invoke(IOwinContext context)
{
var stream = context.Response.Body;
using (var buffer = new MemoryStream())
{
context.Response.Body = buffer;
await Next.Invoke(context);
buffer.Seek(0, SeekOrigin.Begin);
var byteArray = Encoding.ASCII.GetBytes("Hello World");
context.Response.StatusCode = 200;
context.Response.ContentLength = byteArray.Length;
buffer.SetLength(0);
buffer.Write(byteArray, 0, byteArray.Length);
buffer.Seek(0, SeekOrigin.Begin);
buffer.CopyTo(stream);
}
}
}
Однако я все еще получаю ответ OAuthBearerAuthentication
промежуточное программное обеспечение после вызова API, которое:
{"Сообщение": "Авторизация отклонена для этого запроса".}
Здесь я научился писать код, который изменяет тело ответа;