今天主要說三個内容,都是和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的詳細資訊,可以看下面的兩篇文章。
<a href="http://msdn.microsoft.com/zh-cn/library/h0hfz6fc(v=vs.80).aspx" target="_blank">customErrors 元素(ASP.NET 設定架構)</a>
<a href="http://www.cnblogs.com/ap0606122/archive/2011/07/07/2099937.html" target="_blank">關于web.config中<customErrors>節點說明</a>
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>
-->
關于更詳細的的使用,可以參考下面的兩篇文章。
<a href="http://msdn.microsoft.com/library/dd465326.aspx" target="_blank">Web.config Transformation Syntax for Web Application Project Deployment Using Visual Studio</a>
<a href="http://blogs.msdn.com/b/webdev/archive/2009/05/04/web-deployment-web-config-transformation.aspx" target="_blank">Web Deployment: Web.Config Transformation</a>
本文轉自 virusswb 51CTO部落格,原文連結:http://blog.51cto.com/virusswb/1090636,如需轉載請自行聯系原作者