@if (HttpContext.Current.IsDebuggingEnabled) { }
Class
public class UrlInformation { [XmlElement(ElementName = "ActionName")] public string ActionName { get; set; } [XmlElement(ElementName = "ControllerName")] public string ControllerName { get; set; } [XmlElement(ElementName = "AreaName")] public string AreaName { get; set; } }
Class for XML Serializaion
[XmlTypeAttribute(AnonymousType = true)] public class clsUrlInformation { [XmlElement("Files")] public List<UrlInformation> Url { get; set; } public clsUrlInformation() { Url = new List<UrlInformation>(); } }
XML example (specify here the debugging action method / controller / scope names)
<?xml version="1.0" ?> <Url> <Files> <AreaName></AreaName> <ControllerName>Home</ControllerName> <ActionName>Index</ActionName> </Files> <Files> <AreaName></AreaName> <ControllerName></ControllerName> <ActionName></ActionName> </Files> </Url>
Action filter
public class MyActionClass : ActionFilterAttribute { public override void OnActionExecuting( ActionExecutingContext filterContext) {
Say you have XML. XML contains information about the scope, action method name, and controller name
var xml = @"<?xml version=""1.0"" ?> <Url> <Files> <AreaName></AreaName> <ControllerName>Home</ControllerName> <ActionName>Index</ActionName> </Files> <Files> <AreaName></AreaName> <ControllerName></ControllerName> <ActionName></ActionName> </Files> </Url>";
Performing XML serialization and converting XML to a list of classes.
var serializer = new XmlSerializer(typeof(clsUrlInformation), new XmlRootAttribute("Url")); using (var stringReader = new StringReader(xml)) using (var reader = XmlReader.Create(stringReader)) { clsUrlInformation result = (clsUrlInformation)serializer.Deserialize(reader); RouteData Route = filterContext.Controller.ControllerContext.RouteData; String controller = Convert.ToString(Route.Values["controller"]); String action = Convert.ToString(Route.Values["action"]); String area = Convert.ToString(Route.DataTokens["area"]);
Compare current action with xml to show 404
foreach (var item in result.Url) { if (HttpContext.Current.IsDebuggingEnabled && controller == item.ControllerName && action == item.ActionName && area == item.AreaName) { filterContext.Result = new HttpNotFoundResult(); return; } } } base.OnActionExecuting(filterContext); } }
@CristiDiaconescu: Mentioning debugging URLs in an XML file will be more flexible. WHAT FOR? Because later, you can make changes to your XML to increase / decrease / update the URL information without changing the code and without deploying the dll. Is not it?