यह इसलिए होता है क्योंकि डिफ़ॉल्ट रूट (आप यह सोचते हैं की 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.
क्षमा करें, लेकिन यह मदद नहीं की, niether स्थानों है कि कहते हैं, "elmah.axd" में RegisterRoutes विधि में एक IgnoreRoute जोड़ने web.config फ़ाइल –
प्रयास के सभी बदल रहा था। इस तरह, एमवीसी अनुरोध को संभालने का प्रयास नहीं करेगा: मार्ग। इग्नोर रूट ("व्यवस्थापक/Elmah.axd"); मार्ग। अनदेखा मार्ग ("व्यवस्थापक/Elmah.axd/{* pathInfo}"); मार्ग। अनदेखा मार्ग ("{संसाधन} .axd/{* pathInfo}"); –
यह पैच काम करेगा, लेकिन मुझे पैच नहीं चाहिए, मैं समझना चाहता हूं कि यह डिफ़ॉल्ट मार्ग कहां पंजीकृत करता है और वेब.कॉन्फिग में मेरे बदलाव के बाद यह क्यों स्थिर हो जाता है –