在今年六月的時候,我有寫了一篇有關 ELMAH.MVC 2.0.0 的介紹文章:「Elmah.MVC 2.0.0」,其中討論了有關 Elmah Dashboard 瀏覽路徑的設定問題,原本 Elmah.MVC 2.0.0 不能夠讓我們自己去設定瀏覽路徑,而我也到作者的 Blog 中向他反應這個問題,但是作者的回覆說,基於「security by obscurity」以及加入瀏覽權限設定並且只限定 local 讀取 Elmah 就不需要擔心,不過在 2012-08-16 所更新的 Elmah.MVC 2.0.1,在這個版本裡就增加了可以自行定義瀏覽路徑的設定,另外也針對 VB.NET 使用 Elmah.MVC 時所發生的錯誤也做了修正(由 KKBruce 向作者提出),接下來說明一下有關自行定義 Elmah Dashboard 瀏覽路徑的設定與該注意的地方。
ELMAH.MVC 2.0.1
作者 Blog 文章:http://www.beletsky.net/2012/08/elmahmvc-201-update-is-out.html
github:https://github.com/alexanderbeletsky/elmah.mvc
怎麼使用 NuGet 安裝 Elmah.MVC 2.0.1 的老哏就不再說了,開個專案加入 Elmah.MVC 後就來看看有什麼樣的變化,
Web.Config
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.route" value="elmah" />
</appSettings>
可以看到在 Web.Config 的設定中有多了一個「elmah.mvc.route」的設定,我們只要更改這個地方就可以自行定義瀏覽 Elmah Dashboard 的路徑,
引用作者在 Blog 中的說明是:
Custom ELMAH route
Another demanded feature was to provide custom path to ELMAH controller. By default ELMAH is available under
/elmah
, which is nice, but sometimes you what to have a freedom to change it. It's now possible,web.config
has additional configuration section,<add key="elmah.mvc.route" value="elmah" />
. By setting up elmah.mvc.route parameter, you can tweek a default one, like<add key="elmah.mvc.route" value="secure/admin/errors" />
for instance.
等一下再來試試看這個設定的修改,接下來看一下另外一個改變的地方,原本我們的專案在加入 Elmah.MVC 2.0.0 後會在專案中增加一個目錄以及一個檔案,如下:
而在 Elmah.MVC 2.0.1 則是不會在專案中加入這些目錄與檔案,
引用作者的說明:
Besides of that...
ELMAH.MVC does not depend on WebActivator any longer. I've removed
App_Start.cs
code and used PreApplicationStartMethodAttribute attribute. That allows to make a package more tiny + actually made it possible to avoid separate NuGet package for VB.NET projects.
好了,看完上面有關 Elmah.MVC 2.0.1 的更新說明之後,我們就來試試看我比較在意的自行定義路徑設定,我延續「Elmah.MVC 2.0.0」這篇文章中的專案設定,並且把瀏覽路徑的設定也做了修改(原本預設為 elmah),
接下來就來試試看是否可以在設定的瀏覽路徑中看到 Elmah Dashboard,
在上圖中,我們可以看到瀏覽器的網址列裡所輸入的路徑就是「/ErrorAdmin」,現在新版的 Elmah.MVC 2.0.1 可以經由我們所自行定義的路徑了,但是…… 雖然可以經由我們字定義的路徑進入 Elmah Dashboard,但原本的「/Elmah」路徑呢?
還是一樣可以經由「/Elmah」路徑進入 Elmah Dashboard,但是頁面的呈現就變得怪怪的啦,看一下 Elmah 所記錄下來的問題,
這是因為我們已經藉由在 Web.Config 的「elmah.mvc.route」設定去改變了路徑名稱,所以由路徑「/Elmah」進入 Dashboard 時就找不到 stylesheet.css 檔案,
「/ErrorAdmin/stylesheet」
而為什麼我們已經設定了其他的路徑名稱,卻還是可以經由「/Elmah」路徑進入 Dashboard 呢?
在 Elmah.MVC 的 github 說明中就有提到了這個問題,
作者在自己 Blog 的文章說明:「ASP.NET MVC Routes and Namespaces」,雖然我大致了解作者所謂的「問題」所在,但是我在這邊卻不知道應該如何解釋,為了避免誤導大家,所以就請大家前往這篇文章「ASP.NET MVC Routes and Namespaces」去做個了解吧!
那我們還是要解決已經設定自行定義的瀏覽路徑後就不允許「/Elmah」的路徑呀……
既然 Elmah.MVC 現階段的版本無法去做到這一點,那我們其實還是可以用其他的方法來解決,這個解決的方法就是在 MVC 網站專案的 Global.asax 中的 RegisterRoutes() 方法內去增加一個忽略的路徑,
如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("Elmah");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
這邊我就把預設的「/Elmah」路徑給設定為忽略,這樣一來當輸入「http:// website /Elamh」時就會是 404 的狀態了,
在 Elmah 所記錄到的錯誤
原本在上次介紹 Elmah.MVC 2.0.0 後就想要寫一篇有關更改預設瀏覽 Elmah Dashboard 路徑的文章,那時候的做法就是去把 Elmah.MVC 2.0.0 的 Source Code 給抓下來然後自己修改 MapRoute 的地方,但後來因為忙著搬家,所以就沒有再進行這件事了,一直到前幾天看著 Google Reader 的訂閱文章時發現到 Elmah.MVC 作者做了更新,除了可以支援 VB.NET 之外,就是可以自定義 Elmah Dashboard 瀏覽路徑的設定,看來作者應該是收到與我相同的需求回應,所以就修改了這一部分,有勞 Elmah.MVC 的作者了。
以上
沒有留言:
張貼留言