2013-02-14 68 views
8

मैंने अपने एएसपी.नेट एमवीसी 4 .NET 4 वेब एप्लिकेशन में ELMAH जोड़ा है।ईएलएमएएच जोड़ने और elmah.mvc.route बदलने के बाद पुराना मार्ग अभी भी उपलब्ध है

एकीकरण सरल था और यह अच्छी तरह से काम करता है।

मैं एक "व्यवस्थापक/SiteLog" मार्ग के लिए अपने web.config के ऐप्स सेटिंग में "elmah.mvc.route" मूल्य बदल दिया है - elmah लॉग इस मार्ग अब

लेकिन पर प्रदर्शित किया जाता है, यह किसी भी कारण से "/ elmah" पर भी दिखाया गया है (बिना सीएसएस स्टाइल, लेकिन एक ही सामग्री के साथ)।

मैं डिफ़ॉल्ट एल्मा मार्ग कैसे अक्षम कर सकता हूं?

एकीकरण nuget पैकेज

उत्तर

9

यह इसलिए होता है क्योंकि डिफ़ॉल्ट रूट (आप यह सोचते हैं की httpHandlers खंड में पथ को अपडेट करके स्थान निर्दिष्ट कर सकते एक है) अभी भी Elmah.Mvc.ElmahController से मेल खाता है।

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

इस "{नियंत्रक}" मार्ग के भाग एक मिलान नियंत्रक मिलेगा कि क्या आप यह चाहते हैं या नहीं। यह इस मामले में स्पष्ट रूप से समस्याग्रस्त है।

आप IRouteConstraint का उपयोग कर अपने मार्गों पर बाधा डाल सकते हैं, here रेखांकित। 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

Elmah.MVC का उपयोग कर बनाया गया था तुम web.config

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

क्षमा करें, लेकिन यह मदद नहीं की, niether स्थानों है कि कहते हैं, "elmah.axd" में RegisterRoutes विधि में एक IgnoreRoute जोड़ने web.config फ़ाइल –

+0

प्रयास के सभी बदल रहा था। इस तरह, एमवीसी अनुरोध को संभालने का प्रयास नहीं करेगा: मार्ग। इग्नोर रूट ("व्यवस्थापक/Elmah.axd"); मार्ग। अनदेखा मार्ग ("व्यवस्थापक/Elmah.axd/{* pathInfo}"); मार्ग। अनदेखा मार्ग ("{संसाधन} .axd/{* pathInfo}"); –

+0

यह पैच काम करेगा, लेकिन मुझे पैच नहीं चाहिए, मैं समझना चाहता हूं कि यह डिफ़ॉल्ट मार्ग कहां पंजीकृत करता है और वेब.कॉन्फिग में मेरे बदलाव के बाद यह क्यों स्थिर हो जाता है –

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="*" />