2013-02-14 10 views
8

私はELMAHをASP.NET MVC 4 .Net 4 Webアプリケーションに追加しました。ELMAHを追加してelmah.mvc.routeを変更しても、古いルートは引き続き利用可能です。

統合は簡単で、うまく機能します。

私は、「管理者/ sitelogが」ルートに私のweb.configのアプリの設定で「elmah.mvc.route」の値を変更しました - ELMAHログは、現在

このルートに表示されている。しかし、それは何らかの理由で(「CSSのスタイリングはありませんが、同じ内容」で)「/ elmah」にも表示されています。

デフォルトのelmahルートを無効にするにはどうすればよいですか?

統合が

答えて

9

httpHandlersセクションでパスを更新することにより、場所を指定することができます1つは持っている)はまだElmah.Mvc.ElmahControllerに一致します。

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

ルートの「{controller}」部分には、必要に応じて一致するコントローラがあります。この場合、明らかに問題になります。

hereで説明されているIRouteConstraintを使用して、ルートに制約を追加できます。 NotEqual制約は実際には非常に便利です。

using System; 
using System.Web; 
using System.Web.Routing; 

public class NotEqual : IRouteConstraint 
{ 
    private string _match = String.Empty; 

    public NotEqual(string match) 
    { 
     _match = match; 
    } 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return String.Compare(values[parameterName].ToString(), _match, true) != 0; 
    } 
} 

次に、ElmahControllerをデフォルトルートから除外するには、次のようにします。

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     new { controller = new NotEqual("Elmah") }); 

これは、「/ ELMAH」に対する要求が、私はちょうど私と最新バージョンがうまく十分に機能アプリの設定のカップルを持っているように見えるこの問題を通じて取り組んできた404

-1

をパッケージnuget Elmah.MVCを使用して作られたあなたは、web.configファイルのデフォルトルート(あなたを想定しているため、この問題が発生した

<httpHandlers> 
     <add verb="POST,GET,HEAD" path="admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/> 
    </httpHandlers> 
+2

申し訳ありませんが、これはnietherがRegisterRoutes方法でIgnoreRouteを追加web.configファイル –

+0

の試みを「elmah.axdを」と言うところのすべてを変えた、助けにはなりませんでした。この方法では、MVCはリクエストを処理しようとしません。 routes.IgnoreRoute( "admin/Elmah.axd"); routes.IgnoreRoute( "admin/Elmah.axd/{* pathInfo}"); routes.IgnoreRoute( "{resource} .axd/{* pathInfo}"); –

+0

このパッチは機能しますが、パッチは必要ありません。デフォルトルートを登録する場所と、web.configの変更後にどこにstilがあるのか​​を理解したい –

14

を返すようになりますこのため。

<add key="elmah.mvc.IgnoreDefaultRoute" value="true" /> 
<add key="elmah.mvc.route" value="admin/elmah" /> 

これはおそらく他のものも認識する価値があるので、デフォルトのインストール後に見てください。

<add key="elmah.mvc.disableHandler" value="false" /> 
<add key="elmah.mvc.disableHandleErrorFilter" value="false" /> 
<add key="elmah.mvc.requiresAuthentication" value="false" /> 
<add key="elmah.mvc.allowedRoles" value="*" /> 
<add key="elmah.mvc.allowedUsers" value="*" /> 
関連する問題