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
.
在UAT中,响应看起来像是来自IIS错误页面的原始HTML(这是由dropzone捕获并在错误气泡中显示得非常糟糕) .
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
.
有没有人有任何想法?我试图包含最相关的信息,但请告诉我是否还有其他错过的信息 . 任何帮助将非常感激 .