您的位置:首页 > 编程语言 > ASP

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("<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息