2014-10-01 1 views
2

Вот краткое (как я могу это сделать) описание моей проблемы вместе со всем соответствующим кодом. Я надеюсь, что формулировка этого сообщения будет немного яснее моего предыдущего запроса на помощь.

У меня есть веб-интерфейс .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; 
      }); 
     } 

Вот мои вопросы (пронумерованы для облегчения ссылки):

  1. Используя весь код, как показано выше, я получаю «400 (неудачный запрос)», когда я вызываю «testPOST()» с моей страницы. Это звучит как проблема маршрутизации .NET Web API, но я не могу понять, что это такое.
  2. Я могу избежать 400 (и на самом деле получить 200), если изменить заголовок «Content-Type» на «application/x-www-form-urlencoded». ОДНАКО, это приводит к тому, что API видит параметр env как NULL.
  3. Я склонен украшать свой параметр метода действия атрибутом «[FromBody]», но это не устраняет проблему «env», являющуюся NULL в моем методе действий API.

Я создал простой плунж с моей очень простой HTML-страницей, используемой для вызова API. Его можно найти здесь:

http://plnkr.co/edit/hY2OUeg9CRQ1QOz8MGU8?p=info

Большое спасибо за любую помощь вы можете предоставить.

ответ

0

'Content-Type': 'применение/х-WWW-форм-urlencoded'

Это будет работать.

Смежные вопросы