2014-12-09 19 views
7

In $ http.post Methode bekomme ich 405 Problem. Für beide POST & GET-Methoden verwenden wir einen einzelnen Dienst (REST).

wenn URL mit localhost es funktioniert. urlAddScenario ist localhost/Service.svc/api/szenarios/hinzufügen. Wenn ich den Computernamen anstelle von locahost verwende, funktioniert es nicht. machinname/Service.svc/api/Szenarien/add

Mein JS-Code ist

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 Service:

[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> 

Ich sehe OPTIONS anstelle von POST in Kopfzeilen.

Headers:

**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 

Fehler:

IE: SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, wird der Zugriff verweigert.

Chrome: XMLHttpRequest kann htp // machinename/services.svc/api/scenarios/add nicht laden. Ungültige HTTP-Statuscode 405

Antwort-Header: HTTP/1.1 405 Methode nicht

erlaubt
+0

Überprüfen Sie die Antwort auf diese Frage Frage http://stackoverflow.com/questions/17528634/ajax-post-works-vs-angularjs-http -does-not-work-w-asp-net-mvc-4 – hknust

Antwort

6

Um CORS über web.config richtig, damit Sie diese 3 benutzerdefinierte Header

<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> 

angeben müssen Wenn Sie planen, Unterstützung PUT und DELETE Verben müssen Sie auch die Preflight überprüfen. Sie können mehr über CORS und Vorflugcheck in dieser Antwort lauten: https://stackoverflow.com/a/27374066/4304188

+0

Ich habe schon versucht, aber keine Verwendung :( – user3194721

+0

Was ist Ihre Definition für ScenarioRequestParams? Meine Vermutung ist, dass Sie Ihre Post-Anfrage falsch erstellen. –

+0

Verwenden Sie wirklich WeB API, weil Sie Code von einem ASMX-Webdienst veröffentlicht haben. –

1

Lösung:

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

ich auch dieses Problem konfrontiert wurde. Wurde 405 und OPTIONEN wurde gemacht. Ich bin über einen Blog gestolpert und habe festgestellt, dass die Art und Weise, wie eckig Param kodiert, vom Webserver nicht richtig verstanden wird.So wird jQuery benötigt, um POST-Daten

0

Fehler von mir zu kodieren, ich hatte einfach zu entfernenmethod="post" action=""

Bad: <form ng-submit="doSubmit()" name="myform" method="post" action="" role="form">

Gut: <form ng-submit="doSubmit()" name="myform" role="form">

Verwandte Themen