Background info:

在我的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上运行) .

Problem:

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

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

dev error

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

uat error

Code

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

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

这是后端代码(在 Page_Load 中为 upload.aspx.cs ):

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();
}

在Dev和UAT的web.config中,我有 <customErrors mode="Off"/> . 我完全难以理解这两种环境之间的区别是什么,即使抛出的异常相同,也会导致响应不同 .

看起来,在UAT中, catch 被忽略了(我不应该在我的开发环境中删除 try / catch 并强制异常,并且能够重现与我在UAT中找到的相同的结果 . 我无法在我的Dev环境中重现该问题而不删除 try / catch ...即使我构建在发布模式并将web.config中的debug标志设置为 false .

有没有人有任何想法?我试图包含最相关的信息,但请告诉我是否还有其他错过的信息 . 任何帮助将非常感激 .