公司一个项目用的是工厂模式,专门写了个项目用Routing来控制URL,当网址经过解析找不到可用的模板时,抛出异常,捕获异常后页面读取404页面模板,并输出“找不到文件”的自定义提示信息。看了日志,IIS记录状态为500。
问题来了:在本机调试能正常显示提示信息。部署到服务器上后访问站点,测试不存在的页面,发现只报“500 - 内部服务器错误。”在服务器上访问测试又能正常显示“找不到文件”的自定义提示信息。
我想应该跟错误信息的显示设置有关,不知道该如何设置,请各位指教。谢谢!另:这帖本来想多给点分的,为什么最多只能给100分?

解决方案 »

  1.   

    配置文件下手
        <customErrors mode="On" defaultRedirect="~/Error/HttpError">
          <error redirect="~/Error/NotFound" statusCode="404" />
        </customErrors>
      

  2.   

    URL本身就是伪静态的,在项目里URL是经过处理的,所以项目里没有报404错误。详细的处理如下://根据URL获取模板文件fulltemplateFilename,因为文件不存在,所以读取模板文件的操作就会出错,获取异常,继续查找默认模板文件夹里的模板文件,不存在,也没有读取到,于是调用MessageException来
    try
    {
    sr = new System.IO.StreamReader(fulltemplateFilename, System.Text.Encoding.UTF8);
    content = sr.ReadToEnd();
    }
    catch (Exception ex)
    {
    if (sr == null)
    {
    #region 调用系统默认模板
    string DefaultTemplateFilename = System.Web.HttpContext.Current.Server.MapPath(FullFileName.Replace(this.Website.CallbackUrl, "/Template/Default/V0.1/"));
    dependencyList.Add(DefaultTemplateFilename);
    try
    {
    sr = new System.IO.StreamReader(DefaultTemplateFilename, System.Text.Encoding.UTF8);
    content = sr.ReadToEnd();
    }
    catch (Exception e)
    {
    if (sr == null)
    throw new MessageException("网页文件(" + FullFileName + ")不存在");
    else
    throw new Exception(e.Message);
    }
    #endregion
    }
    else
    throw new Exception(ex.Message);
    }
    读取错误信息模板,输出错误信息页面:
    catch (MessageException me)
    {
    #region
    //当未定义错误页时,输出系统界面      
    if (string.IsNullOrEmpty(website.Error.Redirect) == true)
    {
    Message.ShowMessage(me, 500);
    Context.Response.End();
    }
    //将异常保存到Session中
    Context.Session.Add("LastError", me); IPage errorpage = website.GetErrorPage();
    Context.Response.StatusCode = 500;
    errorpage.Render();
    Context.Response.End();
      

  3.   

    一般来说,返回500错误是两个系统相会调用的时候,比如Website调用了一个Web API(通过WebRequest),如果Web API出错,不管是404还是什么其他的错误,在Website捕获到的都是500
      

  4.   

    看下是不是走到Context.Response.StatusCode = 500;这里去了
      

  5.   

    请各位大侠仔细看我的问题。
    难道是我表达有问题?我再简单总结下:
    1、功能要求是解析URL找不到可用的模板就给出自定义错误信息,提示页面不存在。
    2、通过测试发现,无论是正常时(在服务器上访问页面,或者本地调试,也就是说没通过互联网访问时能显示预期自定义错误)还是出问题时(在非服务器上访问服务器上的页面,只提示默认的“500内部服务器错误”)IIS日志记录的状态都是500。
    3、我猜想是IIS设置问题,导致不向远程客户端发送详细错误信息。要如何设置呢?
      

  6.   

    是不是在另一台机子上IE打开的?如果是那就是那台IE的错误提示,是设成了   显示HTTP友好错误提示 的了
    进选项..>高级..显示HTTP友好错误提示勾去掉。
      

  7.   

    是不是在另一台机子上IE打开的?如果是那就是那台IE的错误提示,是设成了   显示HTTP友好错误提示 的了
    进选项..>高级..显示HTTP友好错误提示勾去掉。
    请仔细看帖子,和友好错误提示无关。
      

  8.   

    自己解决了。很简单的设置:
    IIS分组下的错误页,编辑功能设置,错误响应选择详细错误散分了,赶紧来接分。