2016-08-22 9 views
6

अनुरोध कर रहा है मैं अपने पृष्ठों का प्रदर्शन करने के लिए एक अनुकूल दृष्टिकोण के रूप में मेरी MVC साइट पर 51 डिग्री का उपयोग कर रहा हूँ। सब ठीक काम कर रहे हैं।जांच करें कि एक मोबाइल डिवाइस डेस्कटॉप साइट

मैं हाल ही में उत्पादन कैशिंग जोड़ लिया है और मैं VaryByCustom का उपयोग चाहे वह मोबाइल या डेस्कटॉप है की जाँच करने के:

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
     // this is for the output cache 
     if (context != null) 
     { 
      switch (custom) 
      { 
       case "Mobile": 
        return GetMobileCustomString(context); 
      } 
     } 

     return base.GetVaryByCustomString(context, custom); 
    } 

    private static string GetMobileCustomString(HttpContext context) 
    { 
     if (context.Request.Browser.IsMobileDevice) 
     { 
      return "IsMobile"; 
     } 
     else 
     { 
      return "IsDesktop"; 
     } 
    } 

हालांकि मुझे लगता है कि अगर पहली मोबाइल उपयोगकर्ता साइट ब्राउज़ करने के लिए किसी समस्या का सामना किया है अनुरोध किया है डेस्कटॉप संस्करण, यह सभी मोबाइल उपयोगकर्ताओं के लिए कैश किया जाएगा।

मैं GetMobileCustomString बदलने के लिए अगर यह एक मोबाइल है एक डेस्कटॉप साइट अनुरोध करने के लिए एक जांच को शामिल करना होगा। क्या इसे करने का कोई तरीका है?

अद्यतन

के रूप में एक इनाम इस पर खोल दिया गया है, मैंने सोचा कि मैं एक अद्यतन की पेशकश करेगा:

सबसे पहले, यह नहीं था के रूप में मैं था पहले लोड डेस्कटॉप पृष्ठ के कारण कैश हो जाने की शुरुआत में सोचा, इसलिए इस पर बहुत सारी खोज, शोध और परीक्षण किया गया है, मुझे लगता है कि डेस्कटॉप पेज को मोबाइल संस्करण के लिए कैश नहीं किया जाना चाहिए (यदि आप एमवीसी 5 पर हैं)। मैं कोड के माध्यम से जब एक मोबाइल अनुरोध कर कदम रखा है और जब यह कस्टम के हिसाब से बदलती करने के लिए हो जाता है, यह context.Request.Browser.IsMobileDevicefalse के रूप में दिखाता है।

यह सुनिश्चित नहीं है कि डेस्कटॉप साइट को मोबाइल साइट के लिए कैश किया जा रहा है - शायद यह bug in MVC 4 से हैंगओवर है। यह सिर्फ (यानी, एक दिन यह ठीक हो जाएगा और फिर एक और दिन यह किसी कारण से डेस्कटॉप साइट की सेवा की जाएगी) और ऐप पूल हमेशा यह ठीक कर देंगे रीसाइक्लिंग यादृच्छिक हो रहा है।

मैंने यह भी पाया मैं का उपयोग करके ओवरराइड ब्राउज़र मिल सकता है कि:

using System.Web.Wepages; 

context.Request.RequestContext.HttpContext.GetOverriddenBrowser(); 

लेकिन यह बहुत उपयोग होने के लिए नहीं मालूम था

+0

क्या आपके पास डेस्कटॉप/मोबाइल ऐप्स और अनुरोध बदलने की अनुमति है? हो सकता है कि आप http अनुरोध के उपयोगकर्ता-एजेंट को सेट कर सकें और इससे पढ़ सकें। –

+1

जब मैं खोज रहा था, तो कोई रास्ता नहीं बनाया गया है, मैं इस पर आया जहां आप ओवरराइड ब्राउज़र को स्पष्ट रूप से सेट कर सकते हैं: http://stackoverflow.com/questions/16080593/mvc4-force-mobile-site-for-all- अनुरोध-डेस्कटॉप भी शामिल है। यदि आप इसे सेट कर सकते हैं, तो इसे पाने का कोई तरीका नहीं है? – Pete

+0

हम्म, उस ब्राउजर ओवरराइड में और अधिक देखा, ऐसा लगता है कि ओवरराइड सिर्फ एक कॉन्स स्ट्रिंग द्वारा सेट किया गया है: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web .WebPages/BrowserHelpers.cs – Pete

उत्तर

0

यह आप काम करना चाहिए क्या कर रहे हैं की तरह मुझे लगता है, बशर्ते आप ग्राहक पक्ष में कैश भंडारण कर रहे हैं।

आप निम्न तरीके से अपने नियंत्रक कार्यों पर OutputCache विशेषता का उपयोग किया जाना चाहिए:

[OutputCache(Duration = 5, VaryByCustom = "Mobile", Location = OutputCacheLocation.Client)] 

(अवधि आप पर निर्भर है)

कहा जा रहा है, ब्राउज़र का पता लगाने HTTP पर आधारित है हेडर तो अनुरोध करने वाला ब्राउज़र एक अलग एजेंट के लिए हेडर भेज रहा है तो कुछ भी आपकी मदद करने जा रहा है।

अन्य विकल्प के बजाय सुविधा का पता लगाने का प्रयोग है।

मुझे उम्मीद है कि इससे मदद मिलती है।

0

51degrees.config के भीतर तो पहले अनुरोध के रूप में पहली बार मोबाइल डिवाइस के इलाज के लिए एक स्थापित करने

<redirect devicesFile="" timeout="20" firstRequestOnly="true" 

यह आपके संचय सिस्टम firstrequestonly भ्रमित किया जा सकता है है, और मूल के एक ही सत्र के रूप में अन्य सभी मोबाइल फोन मोबाइल डिवाइस। इसे गलत पर सेट करने का प्रयास करें और देखें कि क्या इससे आपकी समस्या हल हो जाती है।

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