在不同的Asp.NET/IIS版本中使用Try / Catch进行异常传播/处理?

时间:2018-03-22 21:53:56

标签: c# asp.net .net iis dropzone.js

背景信息:

在我的asp.net(.NET目标框架是4.6.1)应用程序中,我使用dropzone.js客户端上传文件。处理上传的服务器端代码包含在try / catch中。抛出异常时,应捕获,记录错误,将响应状态代码设置为500"An error occurred"应写入响应,最后调用Response.End()

我有两个不同的环境,我正在运行此应用程序。第一个是我的开发环境(Windows 10 Pro,应用程序在IIS 10的本地实例上运行)。第二个是我的UAT环境(带有Windows Server 2012 R2的Azure VM,应用程序在IIS 8.5上运行)。

问题:

当发生异常时(在try / catch内部),我的浏览器收到的响应在Dev和UAT之间是不同的。

在Dev 中,响应为纯文本An error occurred

dev error

在UAT 中,响应看起来像是来自IIS错误页面的原始HTML(这是由dropzone捕获并在错误气泡中显示得非常糟糕)。

uat error

代码

我的dropzone.js前端代码(为了完整起见,我不相信问题在这里):

$("#attachDZ").dropzone({
    url: "/file/upload.aspx",
    maxFilesize: 1024,
    dictDefaultMessage: "Drop files here or click to upload."
});

这是后端代码(位于Page_Load的{​​{1}}):

upload.aspx.cs

在Dev和UAT的web.config中,我有try { // Get the data foreach (string pf in Request.Files) { HttpPostedFile postedfile = (HttpPostedFile)Request.Files[pf]; string strFileName = Path.GetFileName(postedfile.FileName); Byte[] UploadBytes = new Byte[postedfile.ContentLength]; postedfile.InputStream.Read(UploadBytes, 0, postedfile.ContentLength); tTempAtt file = tTempAtt.NewInstance(); file.ContentType = postedfile.ContentType; file.File = UploadBytes; file.FileName = strFileName; file.Insert(); } } catch (Exception ex) { LogProxy.WriteError(ex); Response.StatusCode = 500; Response.Write("An error occurred"); } finally { Response.End(); } 。我完全难以理解这两种环境之间的区别是什么,即使抛出的异常相同,也会导致响应不同。

看来,在UAT中,<customErrors mode="Off"/>被忽略(这不可能,对吧?)。我在Dev环境中删除了catch / try并强制执行异常,并且能够重现与UAT中相同的结果。在没有删除catch / try的情况下,我无法在Dev环境中重现该问题...即使我构建了发布模式并将web.config中的debug标志设置为{{ 1}}。

有没有人有任何想法?我试图包含最相关的信息,但如果还有其他我错过的内容,请告诉我。任何帮助将不胜感激。

0 个答案:

没有答案