Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 304对Owin的响应_C#_Owin - Fatal编程技术网

C# 304对Owin的响应

C# 304对Owin的响应,c#,owin,C#,Owin,使用Owin中间件执行304响应的正确方法是什么 我正在这么做 public override Task Invoke(IOwinContext context) { var response = context.Response; response.ContentType = "application/javascript"; response.StatusCode = 200; if (ClientCached(context.Request, script

使用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
对于空体响应正确吗?它可以工作,但我想知道它应该如何设置才能完全符合规范。您应该使用
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);
    }
}
公共覆盖任务调用(IOwinContext上下文)
{
var-response=context.response;
response.ContentType=“应用程序/javascript”;
if(ClientCached(context.Request,scriptBuildDate))
{
response.StatusCode=304;
//关闭现有主体,以防万一
response.Body.Close();
response.Body=Stream.Null;
返回Task.FromResult(空);
}
其他的
{
response.StatusCode=200;
response.Headers[“Last Modified”]=scriptBuildDate.ToUniversalTime().ToString(“r”);
返回context.Response.WriteAsync(js);
}
}

@Anders对不起我的错误。您可以像以前一样返回null,也可以返回已完成的任务,例如task.FromResult(null)。返回的实际值不是响应的一部分,而是一个“同步点”(标准异步/等待代码)。您以前的解决方案按预期工作,因为主体流为空。所以它没有向响应写入任何内容,将body stream设置为stream。Null告诉Owin您的目标是没有body。谢谢,在iisreset之后,我有时会得到500,如果内容没有修改,因此当ClientCached时执行的代码不正确,将尝试Task.FromResult(Null)看看它是否修复了由于某种原因(但不总是)导致500的问题Return null,前提是我之前进行了iireset,并且客户端缓存部分已经执行。Task.FromResult(null)修复了500个问题。如果您将OWIN框架添加到解决方案中,那么您可以在这些情况下抛出HttpException,它将返回您在异常中设置的任何http状态代码。