@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>();
}
}
Sample XML(Define your debug action method/controller/area names here)
<?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)
{
Let's say you have XML. XML contains information about Area, 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>";
Doing XML Serialization and convert XML to List of Class.
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"]);
Comparing the current action with xml so as 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 the debug urls in XML file will be more flexible. WHY? Because, later on you can make modification in your XML to increase/decrease/update the url information without making the code change and without deploying the dll. Isn't that ?