ASP.NET自定义错误页面,分离配置信息,多环境发布
2012-12-15 16:45
721 查看
今天主要说三个内容,都是和ASP.NET有关的内容。
第一个关于自定义错误的,就是在网站出现404或者500的错误,如何给用户显示一个友好的界面。
第二个是分离配置文件web.config,如果配置信息很多,都放在web.cofig文件,文件会越来越大,越来越长。信息太多了,不便于浏览和维护,如果能分成独立的config该多好。
第三个是关于多环境发布的,多环境指的是:开发环境,测试环境,生产测试环境,生产环境。利用VS方便多环境的配置文件修改。
1.自定义错误
这里说的错误,多指http的错误,例如,404找不到访问的资源,403未授权,500服务器错误。
1.1用代码引导用户
两种方式:
一种是直接给用户呈现信息,使用response.write来完成。
一种是引导用户跳转到一个做好的页面。
1.2使用配置文件
1.2.1 customerrors
在web.cofig文件中提供了一个关于自定义错误的配置节,通过配置,就可以实现错误自动跳转。
上面的配置中说明,如果出现404就跳转到/views/shared/404.aspx页面,其他的就跳转到/views/shared/error.aspx页面。
mode有三个值可选。
Off,关闭自定义错误,直接显示错误信息。在开发环境可以使用这个选项,便于差错。
On,使用自定义错误,不管是本地访问,还是远程访问。在生产环境建议使用这个选项,因为用户看到错误信息是不友好的,而且由于错误信息中可能包好trace stack,这些信息会暴漏系统内部的一些信息,可能会带来麻烦。
RemoteOnly,远程访问使用自定义错误,本地访问显示详细信息。
1.2.2 throw new HttpException(404, "Not Found");
还有一些场景,如果我们的一些业务也想使用自定义错误的配置信息,显示相应的错误页面,那就需要在代码中抛出相应的异常HttpException。
有一些人提出设置Response.StatusCode=404。
在iis6中设置statuscode不起作用,不会跳转,因为虽然code被修改为404,但是没有对输出内容作修改,还不是正真的http异常,所以没有自定跳转。但是可以
throw new HttpException(404, "Not Found")
这样就可以使用自定义错误了。
在iis7的集成模式中,设置statuscode=404,可以实现自动跳转。
当然了,在业务中使用httpcode,可能不太合适,加强了应用和httpcode的耦合,而且看起来也不是很舒服。针对业务的错误提示,还是单独设计,单独实现的比较好。
关于customErrors的详细信息,可以看下面的两篇文章。
customErrors 元素(ASP.NET 设置架构)
关于web.config中<customErrors>节点说明
2.分离配置文件
分离之后有一点需要注意,就是修改分离的配置文件,iis不会重新加载分离配置文件中的信息,只有修改web.config文件,才会重新加载所有配置文件(包括分离的配置文件)的信息。
appSettings.config
上面额两种都可以实现分离配置文件,将appSettings中的配置独立出来。有file属性的节点比较少,但是很多节点都有configSource属性。
3.发布环境配置文件
项目一般都会有三个环境:开发,测试,生产。
随着项目越做越大,越来越复杂,可能还会有更多的环境,例如预发布环境,自动化测试环境,手动测试环境,生产环境1,生产环境2。
总之,就是环境多了。
每个环境的配置信息不同,例如:数据库连接不同,和数据相关的配置不同,还有一些环境特定的自定义配置。
但是有一些是相同的。
如果我们只是简单的copy很多份配置文件,做起来就很累。比如说有一个配置需要修改,但是这个配置在每个环境是相同的,那么重复工作就很多。
其实VS工具给我们提供了一个方便的多环境配置管理,我们只要按照配置使用就可以了。
实用vs建立web application项目之后,在web.config文件下面,会同时存在web.debug.config,web.release.config,这就是默认提供的调试和发布两种环境配置。
我们还可以创建更多,在工具栏中有一个配置管理器,就是有一个下拉框,可以拉出来debug和release的那个地方,下拉项中还有一个配置管理器,打开之后,在左侧的下拉框中可以选择新建,就可以新建一种配置了。
之后就会发现下拉框中多了一个刚才新建的配置项,但是还没有多个配置文件。配置文件需要手动添加,在web.config文件上点击右键,在菜单中选择【添加配置转换】,就会多一个文件,假设刚才新建的配置叫Testing,这个文件就是web.Testing.config。
在web.Testing.config文件中已经有两个例子,可以让你快速的上手。
设置属性。
移除属性。
替换节点。
关于更详细的的使用,可以参考下面的两篇文章。
Web.config Transformation Syntax for Web Application Project Deployment Using Visual Studio
Web Deployment: Web.Config Transformation
项目源码
git://github.com/woaigithub/asp.net-customerrors-seperate-config-multiple-web.config.git
第一个关于自定义错误的,就是在网站出现404或者500的错误,如何给用户显示一个友好的界面。
第二个是分离配置文件web.config,如果配置信息很多,都放在web.cofig文件,文件会越来越大,越来越长。信息太多了,不便于浏览和维护,如果能分成独立的config该多好。
第三个是关于多环境发布的,多环境指的是:开发环境,测试环境,生产测试环境,生产环境。利用VS方便多环境的配置文件修改。
1.自定义错误
这里说的错误,多指http的错误,例如,404找不到访问的资源,403未授权,500服务器错误。
1.1用代码引导用户
Response.Write("<h1>400</h1>"); Response.Redirect("404.html");
两种方式:
一种是直接给用户呈现信息,使用response.write来完成。
一种是引导用户跳转到一个做好的页面。
1.2使用配置文件
1.2.1 customerrors
在web.cofig文件中提供了一个关于自定义错误的配置节,通过配置,就可以实现错误自动跳转。
<system.web> <customErrors defaultRedirect="/views/shared/error.aspx" mode="Off"> <error statusCode="404" redirect="/views/shared/404.aspx" /> </customErrors> </system.web>
上面的配置中说明,如果出现404就跳转到/views/shared/404.aspx页面,其他的就跳转到/views/shared/error.aspx页面。
mode有三个值可选。
Off,关闭自定义错误,直接显示错误信息。在开发环境可以使用这个选项,便于差错。
On,使用自定义错误,不管是本地访问,还是远程访问。在生产环境建议使用这个选项,因为用户看到错误信息是不友好的,而且由于错误信息中可能包好trace stack,这些信息会暴漏系统内部的一些信息,可能会带来麻烦。
RemoteOnly,远程访问使用自定义错误,本地访问显示详细信息。
1.2.2 throw new HttpException(404, "Not Found");
还有一些场景,如果我们的一些业务也想使用自定义错误的配置信息,显示相应的错误页面,那就需要在代码中抛出相应的异常HttpException。
if(true) { throw new HttpException(404, "Not Found"); }
有一些人提出设置Response.StatusCode=404。
在iis6中设置statuscode不起作用,不会跳转,因为虽然code被修改为404,但是没有对输出内容作修改,还不是正真的http异常,所以没有自定跳转。但是可以
throw new HttpException(404, "Not Found")
这样就可以使用自定义错误了。
在iis7的集成模式中,设置statuscode=404,可以实现自动跳转。
当然了,在业务中使用httpcode,可能不太合适,加强了应用和httpcode的耦合,而且看起来也不是很舒服。针对业务的错误提示,还是单独设计,单独实现的比较好。
关于customErrors的详细信息,可以看下面的两篇文章。
customErrors 元素(ASP.NET 设置架构)
关于web.config中<customErrors>节点说明
2.分离配置文件
分离之后有一点需要注意,就是修改分离的配置文件,iis不会重新加载分离配置文件中的信息,只有修改web.config文件,才会重新加载所有配置文件(包括分离的配置文件)的信息。
<appSettings configSource="appSettings.config"></appSettings>
<appSettings file="appSettings.config"></appSettings>
appSettings.config
<?xml version="1.0" encoding="utf-8" ?> <appSettings> <add key="title" value="debug "/> </appSettings>
上面额两种都可以实现分离配置文件,将appSettings中的配置独立出来。有file属性的节点比较少,但是很多节点都有configSource属性。
3.发布环境配置文件
项目一般都会有三个环境:开发,测试,生产。
随着项目越做越大,越来越复杂,可能还会有更多的环境,例如预发布环境,自动化测试环境,手动测试环境,生产环境1,生产环境2。
总之,就是环境多了。
每个环境的配置信息不同,例如:数据库连接不同,和数据相关的配置不同,还有一些环境特定的自定义配置。
但是有一些是相同的。
如果我们只是简单的copy很多份配置文件,做起来就很累。比如说有一个配置需要修改,但是这个配置在每个环境是相同的,那么重复工作就很多。
其实VS工具给我们提供了一个方便的多环境配置管理,我们只要按照配置使用就可以了。
实用vs建立web application项目之后,在web.config文件下面,会同时存在web.debug.config,web.release.config,这就是默认提供的调试和发布两种环境配置。
我们还可以创建更多,在工具栏中有一个配置管理器,就是有一个下拉框,可以拉出来debug和release的那个地方,下拉项中还有一个配置管理器,打开之后,在左侧的下拉框中可以选择新建,就可以新建一种配置了。
之后就会发现下拉框中多了一个刚才新建的配置项,但是还没有多个配置文件。配置文件需要手动添加,在web.config文件上点击右键,在菜单中选择【添加配置转换】,就会多一个文件,假设刚才新建的配置叫Testing,这个文件就是web.Testing.config。
在web.Testing.config文件中已经有两个例子,可以让你快速的上手。
设置属性。
<!-- 在下例中,“SetAttributes”转换将更改 “connectionString”的值,以仅在“Match”定位器 找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。 <connectionStrings> <add name="MyDB" connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> </connectionStrings> -->
移除属性。
<compilation xdt:Transform="RemoveAttributes(debug)" />
替换节点。
<!-- 在下例中,“Replace”转换将替换 web.config 文件的整个 <customErrors> 节。 请注意,由于 在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。 <customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly" xdt:Transform="Replace"> <error statusCode="500" redirect="InternalError.htm"/> </customErrors> -->
关于更详细的的使用,可以参考下面的两篇文章。
Web.config Transformation Syntax for Web Application Project Deployment Using Visual Studio
Web Deployment: Web.Config Transformation
项目源码
git://github.com/woaigithub/asp.net-customerrors-seperate-config-multiple-web.config.git
相关文章推荐
- ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面
- win2003配置IIS ,发布asp.net 时出现错误 “分析器错误信息: 无法识别的属性“type”。” 的解决方法
- ASP.NET自定义错误页面
- ASP.NET配置错误页面浅析
- asp.net自定义错误处理页面的几种方法
- [转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结
- asp.net自定义错误页面
- asp.net中自定义错误处理页面
- ASP.NET自定义的错误页面
- iis7 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容及Login on failed for "IIS APPPOOL\ASP.NET v4.0"问题
- 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题
- asp.net mvc输出自定义404等错误页面,非302跳转。
- ASP.NET自定义错误页面
- asp.net自定义错误处理页面的几种方法
- ASP.NET自定义错误页面
- ASP.NET Entity Framework with MySql服务器发布环境配置
- asp.net自定义错误页面
- Asp.net有关访问页面权限的限制和错误页面配置
- Asp.Net自定义错误页面
- ASP.NET MVC 3 中,自定义全局的错误处理页面