Вот краткое (как я могу это сделать) описание моей проблемы вместе со всем соответствующим кодом. Я надеюсь, что формулировка этого сообщения будет немного яснее моего предыдущего запроса на помощь.
У меня есть веб-интерфейс .NET и интерфейс AngularJS. У меня есть очень простой метод POST, который принимает параметр типа «Envelope», как показано здесь:
public class Envelope {
public int listingId { get; set; }
public string Description { get; set; }
public override string ToString() {
return listingId.ToString() + "; " + Description;
}
}
Фактический метод POST на API появляется здесь:
[EnableCors(origins: "http://simpleapiearl.azurewebsites.net", headers: "*", methods: "*")]
public class EnvelopesController : ApiController {
// POST: api/Envelopes
public string Post(Envelope env) {
return "rval: " + env.ToString() + " (and my addition to env)";
}
}
Мои интерфейсные AngularJS $ HTTP POST выглядит следующим образом:
$scope.testPOST = function() {
var env = {
listingId:1234,
Description:"some desc"
};
$http({
method: 'POST',
url: 'http://simpleApiEarl.azurewebsites.net/api/envelopes',
data: JSON.stringify(env),
headers: {
'Content-Type': 'application/json'
}
}).
success(function (data, status, headers, config) {
$scope.postStatus = 'success: ' + data;
}).
error(function (data, status, headers, config) {
$scope.postStatus = 'error: ' + status;
});
}
Вот мои вопросы (пронумерованы для облегчения ссылки):
- Используя весь код, как показано выше, я получаю «400 (неудачный запрос)», когда я вызываю «testPOST()» с моей страницы. Это звучит как проблема маршрутизации .NET Web API, но я не могу понять, что это такое.
- Я могу избежать 400 (и на самом деле получить 200), если изменить заголовок «Content-Type» на «application/x-www-form-urlencoded». ОДНАКО, это приводит к тому, что API видит параметр env как NULL.
- Я склонен украшать свой параметр метода действия атрибутом «[FromBody]», но это не устраняет проблему «env», являющуюся NULL в моем методе действий API.
Я создал простой плунж с моей очень простой HTML-страницей, используемой для вызова API. Его можно найти здесь:
http://plnkr.co/edit/hY2OUeg9CRQ1QOz8MGU8?p=info
Большое спасибо за любую помощь вы можете предоставить.