当前位置: 代码迷 >> ASP.NET >> asp.net MVC项目web.config 文件customErrors和Global.asax文件的Application_Error冲突有关问题
  详细解决方案

asp.net MVC项目web.config 文件customErrors和Global.asax文件的Application_Error冲突有关问题

热度:8338   发布时间:2013-02-25 00:00:00.0
asp.net MVC项目web.config 文件customErrors和Global.asax文件的Application_Error冲突问题
大家都知道,asp.net 处理错误有优先顺序,Page_Error>ErrorPage>Applilcation_Error>customErrors,现在我有一个奇怪的问题,
Applilcation_Error方法是记录错误内容日志的:
{
string errorUrl = Request.Url.ToString();
  DateTime dt = DateTime.Now;
  Exception ex = Server.GetLastError().GetBaseException();
  string path = Server.MapPath("/ErrorLog.txt");
  if (System.IO.File.Exists(path))
  {
  using (StreamWriter sw = System.IO.File.AppendText(path))
  {
  sw.WriteLine("时间:" + dt.ToString());
  sw.WriteLine("详细错误信息:" + ex);
  sw.WriteLine("错误链接地址:" + errorUrl);
  sw.WriteLine("");
  sw.Flush();
  sw.Close();
  }
  }
  else
  {
  using (StreamWriter sw = System.IO.File.CreateText(path))
  {
  sw.WriteLine("时间:" + dt.ToString());
  sw.WriteLine("详细错误信息:" + ex);
  sw.WriteLine("错误链接地址:" + errorUrl);
  sw.WriteLine("");
  sw.Flush();
  sw.Close();
  }
  }
  Server.Transfer("/app-error.htm"); //这句代码很奇怪
}
customErrors配置文件我是这样写的:
<customErrors mode="Off" defaultRedirect="/Error/Generic">
  <error statusCode="403" redirect="/Error/NoAccess"/>
  <error statusCode="404" redirect="/Error/FileNotFound"/>
  </customErrors>
首先说在本地,如果我只配置Application_Error方法,并在记录错误后我跳转到错误页面,这个是没问题的,并且可以记录到错误信息,但是如果我加上web.config中custoErrors上面的代码,可以跳转,但是错误日志没有了,他不记录了 。
但是我想就用第一个吧,反正让他跳转到指定的错误页面就行,但是这时候问题又来了,部署到IIS上如果页面出现错误,页面不跳转,但是错误还是记录了,为什么就没有跳转到制定的错误页面呢?在本地都是可以的呀!!
可能有点急,比较乱,我现在就说几个重点问题:
1.为什么Application_Error方法和custoErrors不能同时设置
2.为什么如果只在Application_Error接收错误并跳转页面,在本地可以,为什么部署到iis就不跳转了呢?

------解决方案--------------------------------------------------------
是因为错误信息被IIS截获了吧,看一个这个属性:
http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx
和这篇文章:
http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/
  相关解决方案