2012-01-25 17 views
10

पर क्रॉस डोमेन पोस्ट मैं एक ऐप विकसित कर रहा हूं जहां विभिन्न क्लाइंट्स के लिए HTML और जावास्क्रिप्ट भाग वितरित किए जाते हैं। मैं वेब कॉन्फ़िग फ़ाइल के लिए निम्न जोड़कर HTML/जावास्क्रिप्ट हिस्सा प्राप्त करने में सक्षम हूँ:एएसपी.NET एमवीसी ऐप

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
      <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 

यह कर जाता के लिए महान काम कर रहा है। समस्या मैं में चल रहा हूँ पदों क्रॉस डोमेन jQuery का उपयोग कर रही है:

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: JSON.stringify(data), 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('Success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

मैं अपने ऐप (उम्मीद) लेने वाली कई ग्राहकों होगा। मैंने प्रॉक्सी का उपयोग करने के बारे में सोचा, लेकिन मेरे पास क्लाइंट सर्वर का नियंत्रण नहीं है इसलिए मैं प्रॉक्सी के रूप में कार्य करने के लिए httpHandler स्थापित करने में सक्षम नहीं हूं।

मैं अपने एएसपी.NET एमवीसी ऐप पर विभिन्न क्लाइंट क्रॉस डोमेन से जेसन डेटा कैसे पोस्ट कर सकता हूं इस पर कोई सुझाव?

उत्तर

5

मैं अपने ajax कॉल के साथ fiddled और यह (ऊपर ajax कॉल करने के लिए की तुलना में) काम कर रहा है:

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: data, 
     dataType: 'json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

मैं निकाला गया "contentType: 'आवेदन/json' 'और' JSON.stringify (। ..) "कॉल और मैं सर्वर पर पोस्ट करने में सक्षम हूं।

मुझे यकीन नहीं है कि यह क्यों समझाया जा रहा है कि यह क्यों काम कर रहा है। कोई विचार? क्या कोई सुरक्षा समस्या है? मैं यह सब अपने लैपटॉप पर कर रहा हूँ। मैंने आईआईएस 7 के माध्यम से 2 अलग-अलग वेबसाइटें स्थापित की हैं। क्या इससे कोई फर्क पड़ता है?

0

आपके पास दो विकल्प हैं, डेटा टाइप में आप जेसन के बजाय टेक्स्ट या जेसनपी डाल सकते हैं। और यदि आप हमें और उस डेटा का उदाहरण देते हैं जो आप भेज रहे हैं तो यह अधिक आसान होगा।

सादर

1

जब आप crossdomain संपत्ति निर्दिष्ट "सही", डेटाप्रकार संपत्ति jsonp के रूप में स्थापित हो जाता है करने के लिए। हालांकि, एमवीसी पक्ष पर आपको इस जेसनपी को संभालने का एक तरीका चाहिए। आप निम्नलिखित stackoverflow पोस्ट को देखना चाहेंगे: ASP.net MVC returning JSONP

2

आंतरिक रूप से JSONP प्रतिक्रिया (क्रॉस-डोमेन अनुरोधों के लिए डिफ़ॉल्ट प्रकार) <script> टैग इंजेक्शन द्वारा प्राप्त किया जाता है, जो यूआरएल को इंगित करता है। इसके कारण, JSONP के साथ केवल GET विधि संभव है। अन्य विधियों को अनदेखा कर दिया जाएगा और GET पर वापस आ जाएगा।

0

यदि आपके पास जेएस पुस्तकालयों में शामिल हैं, इस पर नियंत्रण है, तो सबसे अच्छा तरीका कई क्रॉस-डोमेन संचार libs का उपयोग करना है। क्लाइंट (आपके मामले में एमवीसी ऐप) को इस तरह के अनुरोधों को स्वीकार करने के लिए कॉन्फ़िगर करना होगा, ज्यादातर मामलों में इसका मतलब है कि स्वीकृति पक्ष पर एक ही lib है।

अब तक का सबसे अच्छा मुझे EasyXDM मिला है। कई सीमाएं नहीं हैं और ब्राउज़र क्षमताओं को स्वयं समायोजित करती हैं। लेकिन आपको इसे एक दूसरे से बात करने वाले दोनों ऐप्स पर रखना होगा।

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