10

के साथ कस्टम प्रेसेफेंडलर और रूटरहेन्डलर मैं एएसपीएनईटी एमवीसी 4 और वेबएपी पर काम कर रहा हूं। मोबाइल उपकरणों द्वारा वेबपी विधियों का उपभोग किया जाएगा। हमें सेवाओं को सुरक्षित करने की आवश्यकता है और हम जो कुछ भी उपयोग कर रहे हैं वह डेटा को किसी विशेष तरीके से एन्क्रिप्ट करना है।एएसपीएनईटी एमवीसी 4 और वेबपी

अब, नियंत्रक पहुंचने से पहले मुझे कॉल को डिक्रिप्ट करने की आवश्यकता है। यदि डिक्रिप्ट की गई जानकारी वैध है, तो नियंत्रक को सामान्य रूप से जारी रखना चाहिए यदि नहीं, तो मैं उपयोगकर्ता को कुछ त्रुटि विधि पर रूट कर दूंगा।

इसे पूरा करने के लिए मुझे लगता है कि सबसे अच्छा शर्त कस्टम एचटीपी हैंडलर और कस्टम रूट हैंडलर होगी। मैं ट्यूटोरियल here

public class MvcSecurityRouteHandler:IRouteHandler 
    { 
     public System.Web.IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      return new MvcSecurityHttpHandler(requestContext); 
     } 
    } 

public class MvcSecurityHttpHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState, IRouteHandler 
    { 
     public RequestContext RequestContext { get; set; } 

     public MvcSecurityHttpHandler(RequestContext requestContext) 
     { 
      this.RequestContext = requestContext; 
     } 

     public bool IsReusable 
     { 
      get { return true; } 
     } 

     public void ProcessRequest(HttpContext httpContext) 
     { 
      var controllerId = RequestContext.RouteData.GetRequiredString("controllerId"); 
      IController controller = null; 
      IControllerFactory factory = null; 
      try 
      { 
       factory = ControllerBuilder.Current.GetControllerFactory(); 
       controller = factory.CreateController(RequestContext, controllerId); 
       if (controller != null) 
       { 
        controller.Execute(RequestContext); 
       } 
      } 
      finally 
      { 
       factory.ReleaseController(controller); 
      } 

      //string originalPath = httpContext.Request.Path; 
      //HttpContext.Current.RewritePath(httpContext.Request.ApplicationPath, false); 
      //IHttpHandler httpHandler = new MvcHttpHandler(); 
      //httpHandler.ProcessRequest(HttpContext.Current); 
      //HttpContext.Current.RewritePath(originalPath, false); 
     } 

     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      var defaults = new RouteValueDictionary 
       {{"controllerId", "Home"},{"action", "Index"},{"id", string.Empty}}; 

      var customRoute = new Route("{controllerId}/{action}/{id}", defaults, new MvcSecurityRouteHandler()); 
      routes.Add(customRoute); 

      routes.MapRoute(
       name: "DefaultWebApi", 
       url: "{controller}/{action}/{id}", 
       defaults: new 
        { 
         controller = "Home", 
         action = "Index", 
         id = UrlParameter.Optional 
        }); 
     } 
    } 

अनुसरण कर रहा हूँ Global.asax.cs

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      var defaults = new RouteValueDictionary 
       {{"controllerId", "Home"},{"action", "Index"},{"id", string.Empty}}; 

      var customRoute = new Route("{controllerId}/{action}/{id}", defaults, new MvcSecurityRouteHandler()); 
      routes.Add(customRoute); 
     } 

और Application_Start

RegisterRoutes(RouteTable.Routes); 

में बाद सेवा निर्भर है, मैं ProcessRequest और उस में एक ब्रेकपाइंट बनाने हिट नहीं किया जा रहा है। क्या गुम हो सकता है? क्या यह करने का सही तरीका है?

+0

आप गलत दृष्टिकोण ले रहे हैं। आपको एक्शनफिल्टर और/या मॉडलबिंडर्स का उपयोग करना चाहिए। – SLaks

+3

लेकिन मैं वेबपी का उपयोग कर रहा हूं, मेरे पास कोई कार्रवाई नहीं है, है ना? और क्यों एक्शनफिल्टर यहां एक बेहतर दृष्टिकोण है? – polonskyg

+0

एक्शनफिल्टर तब तक अच्छा होगा जब तक सुरक्षा/प्राधिकरण पहले संभाला जाता है। कंट्रोलर में कॉल करने से पहले अनुरोध को संशोधित करने के लिए एक्शनफिल्टर नया एचटीपी हैंडलर है। – joezen777

उत्तर

संबंधित मुद्दे