304回应欧文

本文关键字:回应 | 更新日期: 2023-09-27 18:37:14

使用 Owin 中间件执行 304 响应的正确方法是什么?

我正在做这个

public override Task Invoke(IOwinContext context)
{
    var response = context.Response;
    response.ContentType = "application/javascript";
    response.StatusCode = 200;
    if (ClientCached(context.Request, scriptBuildDate))
    {
        response.StatusCode = 304;
        response.Headers["Content-Length"] = "0";
        return null;
    }
    response.Headers["Last-Modified"] = scriptBuildDate.ToUniversalTime().ToString("r");
    return context.Response.WriteAsync(js);
}

返回null空身反应是否正确?它可以工作,但我想知道它应该如何设置

304回应欧文

为了完全符合规范,您应该使用Stream.Null因为这是表示无正文场景的理想方式。

public override Task Invoke(IOwinContext context)
{
    var response = context.Response;
    response.ContentType = "application/javascript";
    if (ClientCached(context.Request, scriptBuildDate))
    {
        response.StatusCode = 304;
        //Close the existing body just in case
        response.Body.Close();
        response.Body = Stream.Null;
        return Task.FromResult<Object>(null);
    }
    else
    {
        response.StatusCode = 200;
        response.Headers["Last-Modified"] = scriptBuildDate.ToUniversalTime().ToString("r");
        return context.Response.WriteAsync(js);
    }
}