当前位置:  开发笔记 > 编程语言 > 正文

如果在MVC之后添加到IApplicationBuilder,则Developer Exception页面为空白

如何解决《如果在MVC之后添加到IApplicationBuilder,则DeveloperException页面为空白》经验,为你挑选了2个好方法。

app.UseDeveloperExceptionPage()如果在方法中添加到IApplicationBuilderMVC(app.UseMvc())之后,Developer Exception Page()为空白Startup.cs Configure.

在MVC之后添加了Developer Exception页面

如果在MVC之前添加,Developer Exception Page工作正常.

在此输入图像描述

在此输入图像描述

这种行为是故意还是做错了?

Mac上的Visual Studio Code 0.10.6

Microsoft.AspNet.Diagnostics 1.0.0-rc1-final

Microsoft.AspNet.Mvc 6.0.0-rc1-final

DNX Mono 1.0.0-rc1-update1

Kévin Chalet.. 5

您所看到的行为完全故意的:在ASP.NET 5中,中间件的执行顺序与注册时相同.

在MVC之后注册开发人员异常页面中间件时,它没有机会捕获控制器操作引发的异常(因为它甚至没有被调用).因此,服务器(Kestrel)拦截了异常,返回500响应,这就是您看到"空白页面"的原因.



1> Kévin Chalet..:

您所看到的行为完全故意的:在ASP.NET 5中,中间件的执行顺序与注册时相同.

在MVC之后注册开发人员异常页面中间件时,它没有机会捕获控制器操作引发的异常(因为它甚至没有被调用).因此,服务器(Kestrel)拦截了异常,返回500响应,这就是您看到"空白页面"的原因.



2> Victor Hurdu..:

即使您得到了答案,我想发布一个解释,说明为什么添加异常中间件不能捕获任何添加之前的内容.

因此,您有一个使用中间件构建的管道.每个中间件(通常)将调用其后添加的中间件.所以你有类似的东西:

M1 -> M2 -> M3 -> M4 -> ... -> Mn

当请求进入时,它将M1执行以下操作:

    进一步传递.

    停止.

如果它进一步传递,那么中间件将有另一次机会在它返回时处理请求.所以请求是这样的:

Request | M1 | M2 | M3 | ... | Mn
--------+----+----+----+-----+---
    X   |    |    |    |     |   
       -->   |    |    |     |   
        |  X |    |    |     |   
        |   -->   |    |     |   
        |    |  X |    |     |   
        |    |   -->   |     |   
        |    |    |  X |     |   
        |    |    |   -->    |   
        |    |    |    |    --> X 
        |    |    |    |    <--
        |    |    |   <--    |       
        |    |    |  X |     |       
        |    |   <--   |     |             
        |    |  X |    |     |       
        |   <--   |    |     |       
        |  X |    |    |     |       
       <--   |    |    |     |
    X   |    |    |    |     |

每个中间件都是一个方法调用:

M1() 
   // Do something before M2
   M2()
       // Do something before M3
       M3()
           ...
       // Do something after M3
   // Do something after M2

因此,如果中间件发生任何事情,它前面的任何中间件都有机会对此作出反应.之后的任何事情,都不知道.例如,如果M2抛出异常,M1可以捕获它,因为M2在上下文中运行M1但是M3尚未调用或已经完成.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有