2017-02-16 17 views
11

Mam nowe API, które buduję z Asp.Net Core i nie mogę uzyskać żadnych danych POSTed do punktu końcowego.Asp.Net Core Post FromBody Always Null

Oto co punkt końcowy wygląda tak:

[HttpPost] 
[Route("StudentResults")] 
public async Task<IActionResult> GetStudentResults([FromBody]List<string> userSocs, [FromBody]int collegeId) 
{ 
    var college = await _collegeService.GetCollegeByID(collegeId); 
    // var occupations = await _laborMarketService.GetOccupationProgramsBySocsAndCollege(userSocs, college); 
    return Ok(); 
} 

A oto co mój ładunek, który wyślę przez Postman wygląda następująco:

{ 
    "userSocs": [ 
      "291123", 
      "291171", 
      "312021", 
      "291071", 
      "152031", 
      "533011" 
     ], 
    "collegeId": 1 
} 

mam upewniając się, że mam listonosza ustaw jako POST, z treści-type = application/json. Co robię źle>?

Odpowiedz

20

Zawsze otrzymujesz null, ponieważ musisz hermetyzować wszystkie zmienne wpisu wewnątrz tylko jednego obiektu. Tak:

public class MyPostModel { 
    public List<string> userSocs {get; set;} 
    public int collegeId {get; set;} 
} 

a następnie

public async Task<IActionResult> GetStudentResults([FromBody] MyPostModel postModel) 
+0

To nie był problem w .NET 4.5, to było? Mógłbym przysiąc, że pamiętam wysyłanie wielu parametrów w POST –

+3

@AlexKibler: Tylko jeśli wyślesz parametry przez formularz lub otrzymasz zapytanie. Możesz mieć tylko jeden model w swoim ciele, więc każdy inny niż podstawowy typ (int, string, itp.) Będzie serializowany do pierwszego modelu. W środowisku ASP.NET Core (niezależnym od wersji 4.5 lub .NET Core) można mieć tylko pojedyncze FromBody (w WebApi 2.x było to niejawne), ponieważ WebAPI i MVC są teraz scalone w jedną strukturę, w której wcześniej były odrębne. – Tseng