Mam bardzo proste .NET Web API gospodarzem w Azure, z dwóch bardzo prostych metod:
[EnableCors(origins: "http://simpleapiearl.azurewebsites.net", headers: "*", methods: "*")]
public class EnvelopesController : ApiController {
// GET: api/Envelopes
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
// POST: api/Envelopes
public string Post([FromBody]Envelope env) {
return "rval: " + env + " (and my addition to env)";
}
}
Utworzono simple plunk, aby wywołać te metody. W moim kodzie AngularJS wykonuję dwie bardzo proste wywołania $ http. GET działa dobrze. POST jednak zawsze zwraca "400 (złe żądanie)", a krótko w mojej konsoli WebStorm przez "XMLHttpRequestion nie może załadować ... Nieprawidłowy kod stanu HTTP 400".
Wszelkie sugestie doceniane!
EDYCJA !!
Witam, i dziękuję za bardzo szybkie odpowiedzi. Właśnie zdałem sobie sprawę, że zapomniałem dodać bardzo istotnych szczegółów.
Parametr do mojej metody POST to obiekt, który nazywam obiektem kopertowym, który zawiera dwie właściwości: listingId (int)
i Description (string)
. Kiedy dodaję zakodowany w górę nagłówek Content-Type i przekazuję '{"listingId":1234, "Description":"some description"}'
jako moje dane POST, parametr env w mojej metodzie POST na serwerze ma wartość NULL (to znaczy, że wydaje się niezdolny do parsowania dostarczonego JSON). Przepraszamy, zostało to pominięte w oryginalnym wpisie.
Sprawdź, czy masz w formularzu jakieś żetony 'xsrf'. jeśli tak jest, nie zapomnij wysłać tego tokena. –
Żądanie wstępnego skanowania (OPCJE) nie działa. Sprawdź, czy to pomaga http://stackoverflow.com/questions/17713412/cors-post-requests-not-working-options-bad-request-the-origin-is-not-allow – Chandermani
możliwy duplikat [How do I POST dane formularza zakodowane za pomocą $ http w AngularJS?] (http://stackoverflow.com/questions/24710503/how-do-i-post-urlencoded-form-data-with-http-in-angularjs) – allenhwkim