Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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# 在owin中间件中读取响应主体_C#_Asp.net Mvc_Httpresponse_Owin Middleware - Fatal编程技术网

C# 在owin中间件中读取响应主体

C# 在owin中间件中读取响应主体,c#,asp.net-mvc,httpresponse,owin-middleware,C#,Asp.net Mvc,Httpresponse,Owin Middleware,我正在尝试在我的MVC控制器操作执行后获取一份响应副本,但是从这里的其他问题来看,我无法让这段代码正常工作(尽管这似乎是一个回答很好的问题) 当我到达第二个seek时,变量“body”是空的 你知道为什么在这之后的结果是一个包含内容的页面时会出现这种情况吗?因此,这里的问题在于Owin和asp.net在整个生命周期中并没有像我所想的那样交织在一起 简而言之,请求生命周期类似于 Do Owin stuff(所有Owin中间件) 做MVC的事情 做服务器的事情 。。。我需要的是 做些什么 做MVC的

我正在尝试在我的MVC控制器操作执行后获取一份响应副本,但是从这里的其他问题来看,我无法让这段代码正常工作(尽管这似乎是一个回答很好的问题)

当我到达第二个seek时,变量“body”是空的


你知道为什么在这之后的结果是一个包含内容的页面时会出现这种情况吗?

因此,这里的问题在于Owin和asp.net在整个生命周期中并没有像我所想的那样交织在一起

简而言之,请求生命周期类似于

  • Do Owin stuff(所有Owin中间件)
  • 做MVC的事情
  • 做服务器的事情
  • 。。。我需要的是

  • 做些什么
  • 做MVC的事情
  • 多做些工作
  • 做服务器的事情
  • 。。。当然,我过分简化了这个过程,但我想简单的解释是当你这样做的时候

    app.Use((context, next) => { ... }).UsestageMarker(?);
    
    。。。“响应处理完成”没有阶段标记

    有趣的是,aspnet core为我们提供了更多的控制,因为在整个请求生命周期中与所有部分的紧密集成更少地依赖于预定义的阶段,更多地是关于用户定义自己处理请求和构建响应的过程

    简言之。。。在AspnetCore中,我可以做我想做的事情,但在owin和.NET4.6中,这似乎是不可能的

    不过,我也提到了一些使用过滤器和处理“OnActionExecuted”的内容,如果您看到这些内容,您的请求和响应对象与owin中间件管道中提供给您的请求和响应对象完全不同(从而增加了更多的证据,证明这些事情实际上不是一个单独的过程,而是按顺序发生的两个过程)


    从那以后,我一直在考虑将我的应用程序迁移到aspnet core。。。事实证明,这比我预期的更令人头痛,但我始终希望最终结果更干净、更快。

    是否
    UseMvc()
    立即跟随您的中间件
    。Use()
    调用?它看起来像ASP.NET核心中间件,而不是OWIN中间件。@rudiviser它不是,此外,这不是.NETCore,而是.NET4。6@War那么
    next
    不涉及控制器执行,这是唯一可行的方法?编辑:不管是不是FullFx,我都认为这种方法是类似的。您的管道中的下一个中间件是什么?它必须是MVC中间件,否则您将无法获得控制器的结果。EDIT2:事实上可能不是,因为你将等待整个管道的完成。。HmmI不知道下一步指的是什么。。。owin是一条复杂的管道。。但我的理解是,如果您调用并等待next,那么您将调用整个管道,而不仅仅是管道中的下一个中间件项。我看到我的控制器动作在等待下一个和第一个搜索调用之间被击中。
    app.Use((context, next) => { ... }).UsestageMarker(?);