ASP.NET自定义错误页面,分离配置信息,多环境发布

简介:

今天主要说三个内容,都是和ASP.NET有关的内容。

  • 第一个关于自定义错误的,就是在网站出现404或者500的错误,如何给用户显示一个友好的界面。
  • 第二个是分离配置文件web.config,如果配置信息很多,都放在web.cofig文件,文件会越来越大,越来越长。信息太多了,不便于浏览和维护,如果能分成独立的config该多好。
  • 第三个是关于多环境发布的,多环境指的是:开发环境,测试环境,生产测试环境,生产环境。利用VS方便多环境的配置文件修改。

 

1.自定义错误

这里说的错误,多指http的错误,例如,404找不到访问的资源,403未授权,500服务器错误。

 

1.1用代码引导用户

 

 

 
  1. Response.Write("<h1>400</h1>"); 
  2.  
  3. Response.Redirect("404.html"); 

 

两种方式:

  • 一种是直接给用户呈现信息,使用response.write来完成。
  • 一种是引导用户跳转到一个做好的页面。

 

 

1.2使用配置文件

 

1.2.1 customerrors

 

在web.cofig文件中提供了一个关于自定义错误的配置节,通过配置,就可以实现错误自动跳转。

 

 
  1. <system.web> 
  2.  
  3.   <customErrors defaultRedirect="/views/shared/error.aspx" mode="Off"> 
  4.  
  5.     <error statusCode="404" redirect="/views/shared/404.aspx" /> 
  6.  
  7.   </customErrors> 
  8.  
  9. </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。

 

 

 
  1. if(true
  2.  
  3.  
  4.   throw new HttpException(404, "Not Found"); 
  5.  

 

 

有一些人提出设置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文件,才会重新加载所有配置文件(包括分离的配置文件)的信息。

 

 

 
  1. <appSettings configSource="appSettings.config"></appSettings> 

 

 

 
  1. <appSettings file="appSettings.config"></appSettings> 

 

appSettings.config

 

 
  1. <?xml version="1.0" encoding="utf-8" ?> 
  2.  
  3. <appSettings> 
  4.  
  5.   <add key="title" value="debug "/> 
  6.  
  7. </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文件中已经有两个例子,可以让你快速的上手。

 

设置属性。

 

 
  1. <!-- 
  2.  
  3.     在下例中,“SetAttributes”转换将更改  
  4.  
  5.     “connectionString”的值,以仅在“Match”定位器  
  6.  
  7.     找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。 
  8.  
  9.      
  10.  
  11.     <connectionStrings> 
  12.  
  13.       <add name="MyDB"  
  14.  
  15.         connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"  
  16.  
  17.         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
  18.  
  19.     </connectionStrings> 
  20.  
  21.   --> 

 

 

移除属性。

 

 
  1. <compilation xdt:Transform="RemoveAttributes(debug)" /> 

 

替换节点。

   

 
  1. <!-- 
  2.  
  3.        
  4.  
  5.       在下例中,“Replace”转换将替换  
  6.  
  7.       web.config 文件的整个 <customErrors> 节。 
  8.  
  9.       请注意,由于  
  10.  
  11.       在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。 
  12.  
  13.        
  14.  
  15.       <customErrors defaultRedirect="GenericError.htm" 
  16.  
  17.         mode="RemoteOnly" xdt:Transform="Replace"> 
  18.  
  19.         <error statusCode="500" redirect="InternalError.htm"/> 
  20.  
  21.       </customErrors> 
  22.  
  23.     --> 

 

 

关于更详细的的使用,可以参考下面的两篇文章。

 

Web.config Transformation Syntax for Web Application Project Deployment Using Visual Studio

Web Deployment: Web.Config Transformation




本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1090636,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
44 5
|
2月前
|
开发框架 JSON 安全
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
|
2月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
2月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
2月前
|
开发框架 前端开发 JavaScript
前后端分离,Asp.net core webapi 如何配置跨域
前后端分离,Asp.net core webapi 如何配置跨域
|
2月前
.Net Core NLog 配置
.Net Core NLog 配置
28 0
|
4月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
74 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
4月前
|
开发框架 JSON .NET
学习ASP.NET 中的 默认应用程序配置源
默认主机配置源 使用命令行配置提供程序的命令行参数
34 2
|
4月前
|
JSON 开发框架 前端开发
技术经验分享:ASP.NETCoreMVC打造一个简单的图书馆管理系统(修正版)(七)学生信息增删
技术经验分享:ASP.NETCoreMVC打造一个简单的图书馆管理系统(修正版)(七)学生信息增删
29 0
|
.NET 数据库连接 数据库
艾伟_转载:温习:ASP.NET页面生命周期
ASP.NET 页面生命周期虽然是最基础的东东,但我发现很多人不能准确地的说出,可能多数程序人员只是对深层技术感兴趣的原因吧?可是如果忘记了最基础的东西,有时会给你的开发制造很大的麻烦。现在把MSDN上的ASP.NET页面生命周期贴出来,大家温习一下吧(温习之前请问一下自己你知道吗): ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。
880 0