@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; }
}
Klasa dla XML Serializaion
[XmlTypeAttribute(AnonymousType = true)]
public class clsUrlInformation
{
[XmlElement("Files")]
public List<UrlInformation> Url { get; set; }
public clsUrlInformation()
{
Url = new List<UrlInformation>();
}
}
Sample XML (Definiowanie nazw metoda działania debug/kontroler/powierzchnia tutaj)
<?xml version="1.0" ?>
<Url>
<Files>
<AreaName></AreaName>
<ControllerName>Home</ControllerName>
<ActionName>Index</ActionName>
</Files>
<Files>
<AreaName></AreaName>
<ControllerName></ControllerName>
<ActionName></ActionName>
</Files>
</Url>
Działanie filtra
public class MyActionClass : ActionFilterAttribute
{
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
Powiedzmy masz XML. XML zawiera informacje o obszarze, metody działania Imię i Controller Nazwa
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 serializacji XML i przekształcić XML do listy klasy.
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"]);
Porównując obecną akcję z XML, tak aby pokazać 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: podając adres URL debugowania w pliku XML będzie bardziej elastyczny. CZEMU? Ponieważ później możesz dokonać modyfikacji w swoim XML, aby zwiększyć/zmniejszyć/zaktualizować informacje o adresie URL bez zmiany kodu i bez instalowania biblioteki dll. Czy nie tak?
Twoje pierwsze dwa podejścia wyglądają jak kod Razor, w którym to momencie może być już za późno - wolałbym mieć (debugowany) URL (s)) ", które można wyłączyć - tj. trafienie ich zwróci 404, a nie stronę ustom (pustą?). Jednak +1 dla HttpContext.Current.IsDebuggingEnabled –
@CristiDiaconescu: ** [Zamiast wspomnieć o trasach w pliku kodu, można wspomnieć w pliku XML, jak wspomniano w tym wpisie] (http://stackoverflow.com/a/ 18362259/2015869) ** –
@CristiDiaconescu: Wzmianka o adresach URL debugowania w pliku XML będzie bardziej elastyczna. CZEMU? Ponieważ później możesz dokonać modyfikacji w swoim XML, aby zwiększyć/zmniejszyć/zaktualizować informacje o adresie URL bez zmiany kodu i bez instalowania biblioteki dll. Czy nie tak? –