2013-02-14 10 views
8

Dodałem ELMAH do mojej aplikacji internetowej ASP.NET MVC 4 .Net 4.Po dodaniu ELMAH i zmianie elmah.mvc.route stara trasa jest nadal dostępna

Zintegrowanie było proste i działa dobrze.

Zmieniłem wartość „elmah.mvc.route” w ustawieniach aplikacji mojego web.config do „admin/SiteLog” trasie - dziennik ELMAH jest wyświetlana na tej trasie teraz

Ale nadal jest pokazywany na "/ elmah" z jakiegoś powodu (bez stylizacji css, ale z tą samą zawartością).

Jak mogę wyłączyć domyślną trasę elmah?

Integracja została wykonana przy użyciu Elmah.MVC Nuget pakować

Odpowiedz

9

Dzieje się tak dlatego, że trasa domyślna (zakładając, że mieć) nadal będzie pasować do Elmah.Mvc.ElmahController.

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

Część trasy "{controller}" znajdzie pasujący kontroler, niezależnie od tego, czy chcesz, czy nie. Jest to oczywiście problematyczne w tym przypadku.

Możesz dodać ograniczenia na trasach, używając narzędzia IRouteConstraint, oznaczonego jako here. Ograniczenie NotEqual jest całkiem przydatne.

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; 
    } 
} 

Następnie należy wykluczyć ElmahController z domyślnej trasy, korzystając z następujących.

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

To sprawi żądania „/ ELMAH” zwróci 404.

-1

Można określić lokalizację aktualizując ścieżkę w sekcji httpHandlers w web.config

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

Niestety, ale to nie pomogło, nie zmieniając niether wszystkich miejsc, które mówi „elmah.axd” w pliku web.config –

+0

spróbować dodać IgnoreRoute w metodzie RegisterRoutes. W ten sposób MVC nie będzie próbowało obsłużyć żądania: routes.IgnoreRoute ("admin/Elmah.axd"); routes.IgnoreRoute ("admin/Elmah.axd/{* pathInfo}"); routes.IgnoreRoute ("{resource} .axd/{* pathInfo}"); –

+0

Ta poprawka zadziała, ale ja nie chcę łatki, chcę wiedzieć, gdzie jest rejestrowana domyślna trasa i dlaczego jest ona niedostępna po mojej zmianie w web.config –

14

Właśnie pracuje przez ten problem się i najnowsza wersja wydaje się mieć kilka ustawień aplikacji, która działa na tyle dobrze dla tego.

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

Prawdopodobnie warto również pamiętać o innych, więc zajrzyj do domyślnej instalacji.

<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="*" /> 
Powiązane problemy