【问题标题】:Replace response body using owin middleware使用 owin 中间件替换响应正文
【发布时间】:2019-02-18 21:21:34
【问题描述】:

有没有办法使用 OWIN 中间件覆盖响应内容?

【问题讨论】:

标签: asp.net .net owin


【解决方案1】:

我的自定义错误类

public class Error
{
    public string error { get; set; }
    public string description { get; set; }
    public string url { get; set; }
}

我的自定义中间件类

public class InvalidAuthenticationMiddleware : OwinMiddleware
{

    public InvalidAuthenticationMiddleware(OwinMiddleware next) : base(next)
    {
    }

    public override async Task Invoke(IOwinContext context)
    {

        var owinResponse = context.Response;
        var owinResponseStream = owinResponse.Body;
        var responseBuffer = new MemoryStream();
        owinResponse.Body = responseBuffer;

        await Next.Invoke(context);

        var result = new Error
        {
            error = "unsupported_grant_type",
            description = "The 'grant_type' parameter is missing or unsupported",
            url = context.Request.Uri.ToString()
        };

        var customResponseBody = new StringContent(JsonConvert.SerializeObject(result));
        var customResponseStream = await customResponseBody.ReadAsStreamAsync();
        await customResponseStream.CopyToAsync(owinResponseStream);

        owinResponse.ContentType = "application/json";
        owinResponse.ContentLength = customResponseStream.Length;
        owinResponse.Body = owinResponseStream;
    }
}

在我的 Startup.cs 中注册

app.Use<InvalidAuthenticationMiddleware>();

我从正文中取消选择 grant_type 以生成 400(错误请求)。

我在 Postman 中的回答

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    相关资源
    最近更新 更多