之前部落格裡介紹 ASP.NET MVC 使用 MiniProfiler 的文章都還是使用 ASP.NET MVC 3,到了 ASP.NET MVC 4 之後就沒有再介紹過了,而 ASP.NET MVC 4 仍然還是可以用 MiniProfiler 整合套件還是使用「MiniProfiler.MVC3」,不過有些地方是需要做些設定上的調整,另外在「MiniProfiler 安全性釋疑」這一篇文章是以 ASP.NET WebForm 來做說明,卻忘了交代 ASP.NET MVC 應該要怎麼做,所以這篇文章就來做個補充說明。
這一次就使用 VS2012 與 ASP.NET MVC 4 來做示範說明。
Step.1
準備好一個專案
Step.2
使用 NuGet 加入 MiniProfiler 相關的套件,要加入的套件有:MiniProfiler, MiniProfiler.MVC3, MiniProfiler.EF.
雖然我們的專案是採用 ASP.NET MVC 4,但還是安裝 MiniProfiler.MVC3,在版本尚未更新的情況下,這一個版本仍然是可以在 ASP.NET MVC 4 的專案中正常使用的,而目前的 MiniPrifiler 版本為 「2.0.2」,
加入上面的套件之後,在 App_Start 目錄下會新增一個「MiniProfiler.cs」的檔案,
Step.3
因為我們的 Model 是使用 ADO.NET Entity Framework,為了要可以監測到每次透過 EF 查詢的 SQL Statement,所以要修改 MiniProfiler.cs 的內容,這在之前相關的 MiniProfiler 文章裡也有交代過,
把 Line 9 ~ 11 移除原本被註解的三個 Namespace using,
然後再移除 Line 42 的註解,如果不移除這個註解的話,MiniPrifiler 是不會監測 EF 所執行的 SQL Statement,也就不會顯示在 MiniProfiler 的 Popup 視窗中,
Step.4
接著就是修改 _Layout.cshtml 的內容,在 _Layout.cshtml 的上面加入StackExchange.Profiling 命名空間的使用,
然後在 _Layout.cshtml 裡加入 jQuery 引用的下方加入 MiniProfiler RenderIncludes 方法,
Step.5
完成上面的步驟之後執行專案,卻沒有看到 MiniProfiler 的 Profiler Popup,
開啟 Firebug 看看,卻看到這樣的錯誤訊息,找不到指定的資源檔案,
解決這個問題的方式就是要在 Web.Config 裡 system.webServer 區段的 handlers 新增以下的內容,
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
加上之後重新建置專案再執行,可以看到 MiniProfiler 相關資源檔案可以正常載入,也可以顯示 Profiler Popup,
如果要對 Profiler Popup 做調整的話,可以參考之前的文章內容「MiniProfiler 2.0.1」
Step.6
在「MiniProfiler 安全性釋疑」裡面有跟大家說明如何在 Web.Config 裡增加一個 appSetting,用來自行調整 Profiler Popup 的顯示與否,那篇文章是以 ASP.NET WebForms 做說明,卻忘了沒有交代 ASP.NET MVC 專案中應該可以怎麼做。
同樣地也在 Web.Config 增加「enable_profiling」的 appSetting 內容,
專案一開始有加入 MiniProfiler.MVC3 套件,然後會在 App_Start 目錄下加入一個 MiniProfiler.cs 檔案,這個檔案的下方有以下的 MiniProfilerStartupModule 類別內容,
其實這個 MiniProfilerStartupModule 內容就是把原本我們會放在 Global.asax 內的處理給抽出來,抽出來的好處在於可以不用直接寫在網站原本的 Global.asax 內,假使日後不要使用 MiniProfiler,只要把 MiniProfiler 相關檔案與設定移除即可,不用另外去修改 Global.asax 內容,讓 Global.asax 可以單純一些。
原本我們要在 Global.asax 裡面的 Application_BeginRequest(), Application_EndRequest() 增加內容,然後再加上判斷 enable_Profiling 設定以決定是否顯示 Profiler Popup,其實這些方式改在 MiniProfiler.cs 裡面的 MiniProfilerStartupModule 內來做處理,如下所示:
public class MiniProfilerStartupModule : IHttpModule
{
private bool _enableProfiling = false;
public bool enableProfiling
{
get
{
if (!this._enableProfiling)
{
this._enableProfiling = bool.Parse(ConfigurationManager.AppSettings["enable_profiling"]);
}
return this._enableProfiling;
}
}
public void Init(HttpApplication context)
{
if (!this.enableProfiling)
{
context.BeginRequest += (sender, e) =>
{
var request = ((HttpApplication)sender).Request;
//TODO: By default only local requests are profiled, optionally you can set it up
// so authenticated users are always profiled
if (request.IsLocal) { MiniProfiler.Start(); }
};
// TODO: You can control who sees the profiling information
/*
context.AuthenticateRequest += (sender, e) =>
{
if (!CurrentUserIsAllowedToSeeProfiler())
{
StackExchange.Profiling.MiniProfiler.Stop(discardResults: true);
}
};
*/
context.EndRequest += (sender, e) =>
{
MiniProfiler.Stop();
};
}
}
public void Dispose() { }
}
如果你還是習慣在 Global.asax 裡來處理這些事情的話,那就依照之前的做法也是可以的。
延伸閱讀:
參考連結:
Scott Allen「ELMAH and MiniProfiler In ASP.NET MVC 4」
以上
感謝補上mvc4的說明 這套件真是很方便
回覆刪除現在直接用ip判斷能不能顯示MiniProfiler 省去on off 設定
還有想請教一件事情
我用vs2010 + mvc3 + Razor
一直遇到 括弧對齊的問題
format document (Ctrl +E + D) 括弧對齊的很奇怪
如果方便的話 我在msdn發了問題 好像沒有人可解
http://social.msdn.microsoft.com/Forums/zh-TW/230/thread/7495aa82-e57b-4043-b2dc-754c7c66b650
您之前用vs2010 有遇過類似的問題嗎?
ps 每個禮拜四的twMVC聚會 大約都幾點結束呢?
每個禮拜四的 twMVC 聚會時間是 PM0730 ~ PM1000
刪除有關於 VS2010 使用 Razor 的不對稱狀況,我並沒有遇到類似的情形出現,
刪除或許是你的 View 裡面的 Razor Syntax 結構比較複雜所導致,
如果可以的話,就下週四晚上帶著你的 Notebook 或是專案來參加 twMVC 聚會,大家一起來研究。
Razor對齊問題,我在VS2012有碰到,也有人反應給微軟了,但似乎不是每個人都會碰到,會不會修正就不知道了。
刪除感謝 KKBruce 的說明。
刪除感謝您的回答,原來到十點 那過去還來得及太棒了
回覆刪除請問站長,我出現以下錯誤Could not load file or assembly 'MiniProfiler, Version=2.1.0.0,未載入WebActivator.PDB,該如何處理呢?
回覆刪除我的環境:vs2012,net4.5,EF5
就照著錯誤訊息的說明,看看有什麼沒有安裝或缺少的
刪除感謝站長!已經解決了
刪除今天想要試用miniprofiler來研究看看,但我目前裝的版本已經是miniprofile mvc4,可是在App_Start並沒有看到miniprofiler.cs這個檔案,可以再針對此議題做點介紹嗎??
回覆刪除最近 MiniProfiler 在做改版的動作,所以有些安裝方式與之前的版本有所不同,
刪除建議隨時關注官網的訊息
http://miniprofiler.com/