8

ELMAHをASP.NETMVC4 .Net4Webアプリケーションに追加しました。

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

web.configのアプリ設定の「elmah.mvc.route」値を「Admin/SiteLog」ルートに変更しました。elmahログはこのルートに表示されます。

ただし、何らかの理由で「/ elmah」にも表示されます(cssスタイルはありませんが、同じ内容です)。

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

統合は、Elmah.MVCnugetパッケージを使用して行われまし

4

3 に答える 3

16

私はこの問題を自分で解決してきましたが、最新バージョンには、これに十分うまく機能するアプリ設定がいくつかあるようです。

<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="*" />
于 2014-05-10T11:27:33.437 に答える
11

これは、デフォルト ルート (ルートがあると仮定) がまだ Elmah.Mvc.ElmahController に一致するために発生します。

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

ルートの「{controller}」部分は、必要かどうかに関係なく、一致するコントローラーを見つけます。この場合、これは明らかに問題です。

こちらで概説されている 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 が返されます。

于 2013-02-28T22:24:52.803 に答える
-1

httpHandlersweb.configのセクションでパスを更新することにより、場所を指定できます。

    <httpHandlers>
        <add verb="POST,GET,HEAD" path="admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
    </httpHandlers>
于 2013-02-14T17:06:19.667 に答える