2012-04-11 42 views
28

(सर्वर दोष से पार पोस्ट। मैं बाद में एहसास हुआ कि मैं शायद पर stackoverflow पहले पूछा जाना चाहिए था)ASP.NET वेब एपीआई केवल कुछ सर्वर

ठीक है पर डाल के लिए 404 देता है, मैं अपने मस्तिष्क और रैकिंग दिया है इस के समाधान के लिए इंटरनेट। मैं बस इसे समझ नहीं सकता।

मैंने ऐसी साइट लिखी है जो एएसपी.नेट एमवीसी वेब एपीआई का उपयोग करती है और जब तक मैं इसे स्टेजिंग सर्वर पर नहीं डालता तब तक सभी अच्छी तरह से काम कर रहे हैं। साइट मेरी स्थानीय मशीन और देव वेब सर्वर पर ठीक काम करती है। देव और स्टेजिंग सर्वर दोनों Win Server 2008 R2 हैं।

समस्या यह है: मूल रूप से साइट काम करती है, लेकिन कुछ एपीआई कॉल हैं जो HTTP PUT विधि का उपयोग करते हैं। ये 404 लौटने के चरण में विफल हो जाते हैं, लेकिन कहीं और ठीक काम करते हैं।

पहली समस्या जो मैं आया और तय किया गया था अनुरोध फ़िल्टरिंग में था। लेकिन अभी भी 404 प्राप्त हो रहा है।

मैंने आईआईएस में ट्रेसिंग चालू कर दी है और निम्न समस्या प्राप्त की है।

168. -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName IIS Web Core 
Notification 16 
HttpStatus 404 
HttpReason Not Found 
HttpSubStatus 0 
ErrorCode 2147942402 
ConfigExceptionInfo 
Notification MAP_REQUEST_HANDLER 
ErrorCode The system cannot find the file specified. (0x80070002) 

कॉन्फ़िगर देव और स्टेजिंग पर समान हैं, वास्तव में पूरी साइट एक सीधी प्रति है।

जीईटी और पीओएसटी क्यों काम करेंगे, लेकिन पुट्स क्यों नहीं?

धन्यवाद

ग्रेग

+0

मेरी का उत्तर मिला मदद करता है? क्या तुमने कोशिश की? – Aliostad

+0

हाँ यह काम किया, धन्यवाद। –

उत्तर

25

उन आईआईएस सर्वर वेब डीएवी मॉड्यूल उन पर स्थापित किया है और मैं शर्त लगा सकता यह आवश्यक नहीं है और क्योंकि व्यक्ति सभी बक्से टिक इंस्टॉल करने से स्थापित किया गया था।

आईआईएस से वेब-डेव को हटा दें।

वैकल्पिक रूप से वेब डीएवी मॉड्यूल को दूर करने के web.config का उपयोग करें:

<system.webServer> 
    <modules> 
     <remove name="WebDAVModule" /> 
    </modules> 
    ... 
+1

धन्यवाद, मैंने कॉन्फ़िगरेशन विकल्प का उपयोग किया और काम किया। –

+1

कभी-कभी वेबएडीवी पीयूटी समस्याओं के लिए अपराधी है, हालांकि तथ्य यह है कि यह समस्या विशेष रूप से वेबएपी (जो विस्तारित यूआरएल हैंडलर का उपयोग करती है) मैं सुझाव दूंगा कि लोग पहले केविन ऑर्टमैन के जवाब को आजमाएं। –

44

आप में से जो लोग WebDAV सक्षम नहीं है, लेकिन अभी भी इस मुद्दे MVC 4 की वेब एपीआई का उपयोग करते हुए चल रहे हैं के लिए ...

स्टीव मिशेलोटी ने एक समाधान दस्तावेज किया जो मेरे लिए here काम करता था।

दिन के अंत में, मैंने सभी क्रियाओं (क्रिया = "*") को मेरी वेब कॉन्फ़िगरेशन में ExtensionlessUrlHandler-Integrated-4.0 हैंडलर में सक्षम किया।

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
</system.webServer> 
+0

यह हल किया गया http://stackoverflow.com/questions/11257749/attributerouting-why-is-my-post-but-not-my-put- मेरे लिए लिखा गया (प्रश्न इस प्रश्न का डुप्लिकेट बन गया)। – Halvard

+0

मेरे लिए केवल भाग के साथ काम किया। ध्यान दें कि runAllManagedModulesForAllRequests से बचा जाना चाहिए, और यहां यह आवश्यक प्रतीत नहीं होता है। –

+1

यह -><मॉड्यूल runAllManagedModulesForAllRequests = "true" /> यह सब कुछ काम कर रहा है। यह आईआईएस को हैंडलरों में सेट "प्रीकंडीशन" सेट को अनदेखा करने के लिए कहता है। – dotnetster

5

मेरा होस्टिंग प्रदाता WebDAV को अनइंस्टॉल नहीं कर सका क्योंकि यह हर किसी को प्रभावित करेगा।

यह, runAllManagedModulesForAllRequests = "true", काम किया लेकिन अनुशंसित नहीं किया गया था।

कई फ़िक्सेस में WebDAVModule के लिए मॉड्यूल को निकालना शामिल था लेकिन यह अभी भी काम नहीं करता है। मैंने हैंडलर को भी हटा दिया, और आखिरकार मैं सभी क्रियाओं का उपयोग कर हटा सकता हूं।

मॉड्यूल और हैंडलर में WebDAVModule और WebDAV को हटाएं। पश्चिम हवा से

<modules> 
    <remove name="WebDAVModule" /> 
</modules> 
<handlers> 
    <remove name="WebDAV" /> 
</handlers> 
+0

इसने अंततः मेरी समस्या हल की, और कुछ नहीं। – CularBytes

1

रिक Strahl निम्नलिखित की सिफारिश की:

 
    < handlers> 
    < remove name="ExtensionlessUrlHandler-Integrated-4.0"/> 
    < add name="ExtensionlessUrlHandler-Integrated-4.0" 
    path="*." 
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
    type="System.Web.Handlers.TransferRequestHandler" 
    preCondition="integratedMode,runtimeVersionv4.0" 
    /> 
    < /handlers> 
कौन सा मेरे लिए बहुत अच्छी तरह से काम किया।

0

मैंने क्लासिक मोड पर पहले एकीकृत मोड में वेबसाइट के लिए अपना एप्लिकेशन पूल बदलकर इसे हल किया।

+0

यदि आप ओविन मिडलवेयर का उपयोग कर रहे थे और आईआईएस पर होस्टिंग करते थे तो समस्या की संभावना थी क्योंकि ओविन केवल एकीकृत मोड – Jordan

4

मैं इस को हटाने URLScan ISAPI फिल्टर

4

मेरे मामले में तय हो गई, इन समाधानों में से कोई भी लागू होता है।

मैंने क्लासिक के बजाय एकीकृत पर अपना ऐप पूल बदलकर इसे ठीक किया।

हैंडलर:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

, एक क्लासिक एप्लिकेशन पूल के साथ काम करने के लिए नहीं जा रहा है के बाद से अपने preConditionintegratedMode है।

10

ऐसा लगता है कि ऐसा होने के कई कारण हैं। उपर्युक्त में से कोई भी मेरे लिए काफी काम नहीं करता है। मेरे पास पहले से ही आवश्यक HTTP क्रियाओं के साथ web.config में ExtensionlessUrlHandler सेटिंग्स थीं। अंत में मैं आईआईएस में निम्न परिवर्तन करना था:

  • आईआईएस में अपनी वेबसाइट का चयन करें और डबल क्लिक करें Handler Mappings
  • ExtensionlessUrlHandler-ISAPI-4.0_32bit का पता लगाएं और डबल क्लिक करें
  • दिखाई देने वाले संवाद में, क्लिक करें Request Restrictions
  • क्रिया टैब पर अल्पविराम के द्वारा अलग लापता HTTP verbs जोड़ने (मेरे मामले में यह PUT और DELETE
  • क्लिक करें Ok जहां आवश्यक औरका जवाब था Edit Script Map संवाद में 0 पॉप अप करता है। के लिए ExtensionlessUrlHandler-ISAPI-4.0_64bit

आशा

  • दोहराएँ इस किसी :)

  • +0

    का समर्थन करता है। यह पहले जांच की जानी चाहिए। – brhardwick