मैंने एक ASP.NET वेब अनुप्रयोग को MVC 4 / वेब एपीआई टेम्पलेट के साथ शुरू किया है। ऐसा लगता है जैसे कि चीजें वास्तव में अच्छी तरह से काम कर रही हैं - कोई समस्या नहीं जो मुझे पता है। साइट के माध्यम से जाने के लिए मैंने क्रोम और फ़ायरफ़ॉक्स का उपयोग किया है। मैंने फ़िडलर का उपयोग करके परीक्षण किया है और सभी प्रतिक्रियाएं पैसे पर लगती हैं।
तो अब मैं इस नए वेब एपीआई का उपभोग करने के लिए एक साधारण Test.aspx लिखने के लिए आगे बढ़ता हूं। स्क्रिप्ट के प्रासंगिक भाग:
<script type="text/javascript">
$(function () {
$.ajax({
url: "http://mywebapidomain.com/api/user",
type: "GET",
contentType: "json",
success: function (data) {
$.each(data, function (index, item) {
....
});
}
);
},
failure: function (result) {
alert(result.d);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("An error occurred, please try again. " + textStatus);
}
});
});
</script>
यह एक वास्तविक शीर्षक बनाता है:
OPTIONS http://host.mywebapidomain.com/api/user HTTP/1.1
Host: host.mywebapidomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://mywebapidomain.com
Access-Control-Request-Method: GET
Access-Control-Request-Headers: content-type
Connection: keep-alive
जैसा कि, वेब एपीआई एक 405 मेथड नॉट अलाउड रिटर्न करता है।
HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 30 Sep 2013 13:28:12 GMT
Content-Length: 96
<Error><Message>The requested resource does not support http method 'OPTIONS'.</Message></Error>
मैं समझता हूं कि विकल्प क्रिया डिफ़ॉल्ट रूप से वेब एपीआई नियंत्रकों में वायर्ड नहीं होती है ... इसलिए, मैंने निम्नलिखित कोड अपने UserController.cs में रखा है:
// OPTIONS http-verb handler
public HttpResponseMessage OptionsUser()
{
var response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
return response;
}
... और इसने 405 मेथड नॉट अलाइड एरर को खत्म कर दिया, लेकिन रिस्पॉन्स पूरी तरह से खाली है - कोई डेटा वापस नहीं किया गया:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 30 Sep 2013 12:56:21 GMT
Content-Length: 0
अतिरिक्त तर्क होना चाहिए ... मुझे नहीं पता कि विकल्प विधि को ठीक से कैसे कोड किया जाए या यदि कोड को डालने के लिए नियंत्रक भी उचित स्थान है। अजीब (मेरे लिए) कि फ़ायरफ़ॉक्स या क्रोम से देखे जाने पर वेब एपीआई साइट ठीक से प्रतिक्रिया देती है, फिर भी .axax त्रुटियों के ऊपर कॉल करता है। मैं .ajax कोड में "प्रीफ़लाइट" चेक को कैसे संभाल सकता हूं? शायद मैं ग्राहक पक्ष पर इस मुद्दे को संबोधित कर रहा होना चाहिए। या, यदि यह विकल्प क्रिया को हैंडल नहीं करने के कारण सर्वर साइड पर कोई समस्या है।
क्या कोई मदद कर सकता है? यह एक बहुत ही सामान्य मुद्दा होना चाहिए और अगर इसका जवाब यहां दिया गया है तो मैं माफी चाहता हूं। मैंने खोज की लेकिन कोई जवाब नहीं मिला जिससे मदद मिली।
अद्यतन IMHO, यह एक ग्राहक पक्ष मुद्दा है और ऊपर Ajax JQuery कोड के साथ क्या करना है। मैं ऐसा इसलिए कहता हूं क्योंकि जब मैं वेब ब्राउज़र से mywebapidomain / api / user को एक्सेस करता हूं तो फ़िडलर कोई भी 405 त्रुटि हेडर नहीं दिखाता है। इस समस्या की नकल करने वाली एकमात्र जगह मैं JQuery .ajax () कॉल से ले सकता हूं। इसके अलावा, सर्वर (समान डोमेन) पर चलने पर समान Ajax कॉल ठीक काम करती है।
मुझे एक और पोस्ट मिली: प्रोटोटाइप AJAX अनुरोध GET के बजाय विकल्प के रूप में भेजा जा रहा है; 501 त्रुटि के परिणाम जो संबंधित प्रतीत होते हैं, लेकिन मैंने बिना किसी सफलता के उनके सुझावों के साथ छेड़छाड़ की है। जाहिरा तौर पर, JQuery को कोडित किया गया है ताकि अगर एक अजाक्स अनुरोध क्रॉस डोमेन (जो मेरा है) तो यह हेडर के एक जोड़े को जोड़ता है जो विकल्प हेडर को किसी भी तरह से ट्रिगर करता है।
'X-Requested-With': 'XMLHttpRequest',
'X-Prototype-Version': Prototype.Version,
बस ऐसा लगता है कि JQuery में कोर कोड को संशोधित करने से बेहतर समाधान उपलब्ध होना चाहिए ...
नीचे दिया गया उत्तर मानता है कि यह एक सर्वर साइड समस्या है। हो सकता है, मुझे लगता है, लेकिन मैं ग्राहक की ओर झुकता हूं और एक होस्टिंग प्रदाता को कॉल करने में मदद नहीं करता हूं।