2014-12-09 11 views
7

$ http.post विधि में मैं 405 मुद्दा हो रही है। हम दोनों पोस्ट & प्राप्त तरीकों के लिए एक सेवा (REST) ​​का उपयोग कर रहे हैं।

यदि यूआरएल स्थानीय होस्ट होने यह काम कर रहा है। urlAddScenario स्थानीयहोस्ट/Service.svc/api/परिदृश्य/जोड़ है। अगर मैं locahost के बजाय मशीन नाम का उपयोग कर रहा हूँ यह काम नहीं कर रहा है। machinname/Service.svc/API/परिदृश्य/जोड़ने

मेरे जे एस कोड

scenarioExecutionFactory.addScenario = function (scenarioId) { 
     return $http.post(urlAddScenario, scenarioId)    
    }; 

anotherJS है:

var runScenarioId = { "ScenarioId": 10 } 
        scenarioExecutionFactory.addScenario(runScenarioId) 
         .success(function (data) { 
          $scope.getScenarioRecentRuns($scope.CurrentScenario); 
         }); 

WCF सेवा:

[OperationContract] 
     [WebInvoke(UriTemplate = "api/scenarios/add", 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json, 
      Method = "POST")] 
     Request AddScenario(ScenarioRequestParams requestParams); 

config:

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Credentials" value="true" /> 
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,OPTIONS" /> 
    <add name="Access-Control-Allow-Headers" value="Origin,Content-Type,Accept,Authorization,X-Ellucian-Media-Type" /> 
    </customHeaders> 

</httpProtocol> 

मैं शीर्षकों में पोस्ट के बजाय विकल्प देख रहा हूं।

हेडर:

**OPTIONS** http://ddd/HelloService/HelloService.svc/PostData HTTP/1.1 
Accept: */* 
Origin: http://localhost:31284 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: accept, content-type 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko 
Host: vijayakatta 
Content-Length: 0 
DNT: 1 
Connection: Keep-Alive 
Pragma: no-cache 

त्रुटि:

आईई: SCRIPT7002: XMLHttpRequest: नेटवर्क त्रुटि 0x80070005, प्रवेश निषेध है।

क्रोम: XMLHttpRequest HTP // machinename/services.svc/API/परिदृश्य/जोड़ने लोड नहीं कर सकता। अमान्य HTTP स्थिति कोड 405

प्रतिक्रिया हेडर: HTTP/1.1 405 पद्धति

+0

इसका जवाब की जाँच करें सवाल http://stackoverflow.com/questions/17528634/ajax-post-works-vs-angularjs-http -Does-नहीं-काम-डब्ल्यू-एएसपी निवल MVC-4 – hknust

उत्तर

6

अनुमति नहीं आदेश सक्षम करने के लिए web.config के माध्यम से CORS ठीक से आप आप की योजना है इन 3 कस्टम हेडर

<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="GET, POST, PUT, DELETE, OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 

निर्दिष्ट करने की आवश्यकता में समर्थन PUT और DELETE क्रियाओं आप भी preflight जांच संभाल करने की जरूरत है। आप इस जवाब में CORS और अधिक के बारे में preflight जाँच पढ़ सकते हैं: https://stackoverflow.com/a/27374066/4304188

+0

मैं पहले से ही की कोशिश की है, लेकिन कोई फायदा नहीं :( – user3194721

+0

ScenarioRequestParams के लिए अपनी परिभाषा क्या है? मेरा अनुमान है कि आप गलत तरीके से अपना पोस्ट अनुरोध तैयार कर रहे हैं। –

+0

क्या आप वास्तव में वीबी एपीआई का उपयोग कर रहे हैं, क्योंकि आपने एएसएमएक्स वेब सेवा से कोड पोस्ट किया है। –

1

समाधान:

$http({ 
    url: "", 
    method: "POST", 
    data: $.param({ 
     data1: ""  
    }), 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
    } 
}); 

मैं भी इस मुद्दे का सामना करना पड़ रहा था। 405 मिल रहा था और विकल्प बनाया गया था। मैं एक ब्लॉग में आया और पाया कि जिस तरह से कोणीय एन्कोड्स परम वेब सर्वर द्वारा ठीक से समझा नहीं जाता है।तो, jQuery मेरी ओर से पोस्ट डेटा

0

गलती एन्कोड करने के लिए आवश्यक है, मैं बस पड़ा हटानेmethod="post" action=""

बुरा: <form ng-submit="doSubmit()" name="myform" method="post" action="" role="form">

अच्छा: <form ng-submit="doSubmit()" name="myform" role="form">

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