2010-05-27 4 views
7

क्या यह संभव है, एएसपी.नेट एमवीसी के भीतर, एक्सेसिंग डिवाइस/ब्राउज़र के आधार पर विभिन्न नियंत्रकों या कार्यों के मार्ग तक?वेब ब्राउज़र/डिवाइस (उदाहरण के लिए आईफोन) पर आधारित एएसपी.नेट एमवीसी रूट

मैं प्रदर्शन और यह की कार्यक्षमता का अनुकूलन करने के मामले में मेरी वेबसाइट के कुछ भागों यह iPhone से पहुंचा जा सकता है, के लिए वैकल्पिक कार्यों और विचारों की स्थापना के बारे में सोच रहा हूँ। मैं आईफोन के लिए पूरी तरह से अलग परियोजना नहीं बनाना चाहता हूं, हालांकि साइट के बहुमत किसी भी डिवाइस पर ठीक है।

यह कैसे करें इस पर कोई विचार है?

+0

यह आपकी मदद कर सकता http://www.hanselman.com/blog/IntroducingASPNETFriendlyUrlsCleanerURLsEasierRoutingAndMobileViewsForASPNETWebForms.aspx – Ammar

उत्तर

0

सर्वश्रेष्ठ शर्त एक कस्टम एक्शन फ़िल्टर होगा।

आपको केवल ActionMethodSelectorAttribute से उत्तराधिकारी होना है, और IsValidRequest कक्षा को ओवरराइड करना है।

public class [IphoneRequest] : ActionMethodSelectorAttribute 
    { 
     public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) 
     { 
      // return true/false if device is iphone 
फिर अपने नियंत्रक में

[IphoneRequest] 
public ActionResult Index() 
+0

ओह और मैं बाहर काम के लिए कि उपकरण iphone है लगता है: स्ट्रिंग एजेंट = controllerContext.HttpContext.Request.UserAgent; रिटर्न एजेंट। शामिल है ("आईफोन") – RPM1984

1

आप एक मार्ग बाधा वर्ग बना सकते हैं:

public class UserAgentConstraint : IRouteConstraint 
{ 
    private readonly string _requiredUserAgent; 

    public UserAgentConstraint(string agentParam) 
    { 
     _requiredUserAgent = agentParam; 
    } 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     return httpContext.Request.UserAgent != null && 
       httpContext.Request.UserAgent.ToLowerInvariant().Contains(_requiredUserAgent); 
    } 
} 

और फिर तो जैसे मार्गों में से एक के लिए बाधा को लागू:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new {id = RouteParameter.Optional}, 
      constraints: new {customConstraint = new UserAgentConstraint("Chrome")}, 
      namespaces: new[] {"MyNamespace.MVC"} 
      ); 

बाद आप एक अन्य मार्ग बना सकते हैं किसी अन्य नामस्थान में एक ही नाम के साथ एक नियंत्रक को अलग या कोई बाधा के साथ इंगित करना।

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