CREATE CUSTOM HTTP HANDLER in Mvc Application based on Xml File Rules
Creating Handler for Mvc Application, Deserialize Rules Xml and Invoke Relevant Contoller / Action
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var virtualPath = HttpContext.Current.Request.CurrentExecutionFilePath.TrimStart('/');
var routeInfo = RoutesBus.GetIdByRoute(virtualPath);
if (routeInfo == null)
{
return new MvcHandler(requestContext);
}
var latestRouteInfo = RoutesBus.GetRouteById(routeInfo.Route_RelatedID, routeInfo.Route_RelatedType);
if (latestRouteInfo == null)
{
return new MvcHandler(requestContext);
}
if (routeInfo.RouteURL != latestRouteInfo.RouteURL)
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.StatusCode = 301;
HttpContext.Current.Response.RedirectLocation = '/' + latestRouteInfo.Route_EntireURL;
HttpContext.Current.Response.End();
}
var showPageTypeControllerRules = Utilities.SerializationHelper.Desirialization<rules>
(ShowPageTypeControllerRulesXml);
Utilities.RouteFactoryByPageType.GetRouteDataAccordingToShowPageRules(requestContext,
showPageTypeControllerRules, routeInfo);
return new MvcHandler(requestContext);
}
... Desirialization (trivial, but anyway)
public class SerializationHelper
{
public static T Desirialization<T>(string filePath)
{
var serializer = new XmlSerializer(typeof(T));
var reader = new StreamReader(filePath);
var result = (T)serializer.Deserialize(reader);
reader.Close();
return result;
}
}
AND GetRouteDataAccordingToShowPageRules And Invoke Relevant Controller
public static void GetRouteDataAccordingToShowPageRules
(RequestContext requestContext, rules showPageTypeControllerRules, RouteInfoObject routeInfo)
{
var relevantRule = (from r in showPageTypeControllerRules.Items where r.name == routeInfo.Route_RelatedType
select r).FirstOrDefault();
if (relevantRule == null) return;
requestContext.RouteData.Values["controller"] = relevantRule.controller;
requestContext.RouteData.Values["action"] = relevantRule.action;
requestContext.RouteData.Values["eventId"] = routeInfo.Route_RelatedID;
}
Creating Handler for Mvc Application, Deserialize Rules Xml and Invoke Relevant Contoller / Action
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var virtualPath = HttpContext.Current.Request.CurrentExecutionFilePath.TrimStart('/');
var routeInfo = RoutesBus.GetIdByRoute(virtualPath);
if (routeInfo == null)
{
return new MvcHandler(requestContext);
}
var latestRouteInfo = RoutesBus.GetRouteById(routeInfo.Route_RelatedID, routeInfo.Route_RelatedType);
if (latestRouteInfo == null)
{
return new MvcHandler(requestContext);
}
if (routeInfo.RouteURL != latestRouteInfo.RouteURL)
{
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.StatusCode = 301;
HttpContext.Current.Response.RedirectLocation = '/' + latestRouteInfo.Route_EntireURL;
HttpContext.Current.Response.End();
}
var showPageTypeControllerRules = Utilities.SerializationHelper.Desirialization<rules>
(ShowPageTypeControllerRulesXml);
Utilities.RouteFactoryByPageType.GetRouteDataAccordingToShowPageRules(requestContext,
showPageTypeControllerRules, routeInfo);
return new MvcHandler(requestContext);
}
... Desirialization (trivial, but anyway)
public class SerializationHelper
{
public static T Desirialization<T>(string filePath)
{
var serializer = new XmlSerializer(typeof(T));
var reader = new StreamReader(filePath);
var result = (T)serializer.Deserialize(reader);
reader.Close();
return result;
}
}
AND GetRouteDataAccordingToShowPageRules And Invoke Relevant Controller
public static void GetRouteDataAccordingToShowPageRules
(RequestContext requestContext, rules showPageTypeControllerRules, RouteInfoObject routeInfo)
{
var relevantRule = (from r in showPageTypeControllerRules.Items where r.name == routeInfo.Route_RelatedType
select r).FirstOrDefault();
if (relevantRule == null) return;
requestContext.RouteData.Values["controller"] = relevantRule.controller;
requestContext.RouteData.Values["action"] = relevantRule.action;
requestContext.RouteData.Values["eventId"] = routeInfo.Route_RelatedID;
}
No comments:
Post a Comment