公司一个项目用的是工厂模式,专门写了个项目用Routing来控制URL,当网址经过解析找不到可用的模板时,抛出异常,捕获异常后页面读取404页面模板,并输出“找不到文件”的自定义提示信息。看了日志,IIS记录状态为500。
问题来了:在本机调试能正常显示提示信息。部署到服务器上后访问站点,测试不存在的页面,发现只报“500 - 内部服务器错误。”在服务器上访问测试又能正常显示“找不到文件”的自定义提示信息。
我想应该跟错误信息的显示设置有关,不知道该如何设置,请各位指教。谢谢!另:这帖本来想多给点分的,为什么最多只能给100分?
问题来了:在本机调试能正常显示提示信息。部署到服务器上后访问站点,测试不存在的页面,发现只报“500 - 内部服务器错误。”在服务器上访问测试又能正常显示“找不到文件”的自定义提示信息。
我想应该跟错误信息的显示设置有关,不知道该如何设置,请各位指教。谢谢!另:这帖本来想多给点分的,为什么最多只能给100分?
<customErrors mode="On" defaultRedirect="~/Error/HttpError">
<error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
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();
难道是我表达有问题?我再简单总结下:
1、功能要求是解析URL找不到可用的模板就给出自定义错误信息,提示页面不存在。
2、通过测试发现,无论是正常时(在服务器上访问页面,或者本地调试,也就是说没通过互联网访问时能显示预期自定义错误)还是出问题时(在非服务器上访问服务器上的页面,只提示默认的“500内部服务器错误”)IIS日志记录的状态都是500。
3、我猜想是IIS设置问题,导致不向远程客户端发送详细错误信息。要如何设置呢?
进选项..>高级..显示HTTP友好错误提示勾去掉。
进选项..>高级..显示HTTP友好错误提示勾去掉。
请仔细看帖子,和友好错误提示无关。
IIS分组下的错误页,编辑功能设置,错误响应选择详细错误散分了,赶紧来接分。