2012年8月25日 星期六

ELMAH.MVC 2.0.1 - 可以自訂瀏覽路徑

在今年六月的時候,我有寫了一篇有關 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 後會在專案中增加一個目錄以及一個檔案,如下:

image

而在 Elmah.MVC 2.0.1 則是不會在專案中加入這些目錄與檔案,

image

引用作者的說明:

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),

image

接下來就來試試看是否可以在設定的瀏覽路徑中看到 Elmah Dashboard,

image

在上圖中,我們可以看到瀏覽器的網址列裡所輸入的路徑就是「/ErrorAdmin」,現在新版的 Elmah.MVC 2.0.1 可以經由我們所自行定義的路徑了,但是…… 雖然可以經由我們字定義的路徑進入 Elmah Dashboard,但原本的「/Elmah」路徑呢?

image

還是一樣可以經由「/Elmah」路徑進入 Elmah Dashboard,但是頁面的呈現就變得怪怪的啦,看一下 Elmah 所記錄下來的問題,

image

image

這是因為我們已經藉由在 Web.Config 的「elmah.mvc.route」設定去改變了路徑名稱,所以由路徑「/Elmah」進入 Dashboard 時就找不到 stylesheet.css 檔案,

image

image

「/ErrorAdmin/stylesheet」

image

 

而為什麼我們已經設定了其他的路徑名稱,卻還是可以經由「/Elmah」路徑進入 Dashboard 呢?

在 Elmah.MVC 的 github 說明中就有提到了這個問題,

image

作者在自己 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 的狀態了,

image

在 Elmah 所記錄到的錯誤

image


 


原本在上次介紹 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 的作者了。

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。