2017-10-10 7 views
1

작동 I가 다음과 같은 조치를 포함하는 ASP.NET 코어 2.0 웹 APIStringContent의 null 값의 결과 만 FormUrlEncodedContent 제대로

public class LoginModel 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

에서 다음 모델

[HttpPost] 
public async Task<IActionResult> Login(LoginModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, false, false); 
     if (result.Succeeded) 
     { 
      ApplicationUser user = await UserManager.FindByNameAsync(model.Username); 
      return new ObjectResult(await GenerateToken(user)); 
     } 
    } 
    return BadRequest(model); 
} 

JsonConvert와 StringContent를 사용하여 테스트 클라이언트에서 컨트롤러의 작업에 게시 될 때 모델에 NULL 값이 표시됩니다.

var credentials = new LoginModel() { Username = "[email protected]", Password = "somePassword" }; 
var content = new StringContent(JsonConvert.SerializeObject(credentials), Encoding.UTF8, "application/json");   
var response = await client.PostAsync("/api/auth/login", content); 

FormUrlEncodedContent를 사용하면 컨트롤러의 작업에서 모델이 올바르게 채워집니다.

var content = new FormUrlEncodedContent(new[] 
{ 
    new KeyValuePair<string, string>("username", "[email protected]"), 
    new KeyValuePair<string, string>("password", "somePassword"), 
} 
var response = await client.PostAsync("/api/auth/login", content); 

또한 HttpClient 확장을 사용하여 게시했을 때 모델에 값이 표시되지 않습니다.

var credentials = new LoginModel() { Username = "[email protected]", Password = "somePassword" }; 
var response = await client.PostAsJsonAsync<LoginModel>("/api/auth/login", credentials); 

무엇이 누락 되었습니까? 어떤 도움이라도 대단히 감사하겠습니다.

+3

가능한 복제 [왜 POST 본문에 데이터를 예상 할 때 내가 FromBody 특성을해야합니까] (HTTPS : //stackoverflow.com/questions/34529346/why-do-i-need-frombody-attribute-when-expecting-data-in-post-body) – Set

+0

중복되지 않습니다. 대답은 같을 수 있지만 질문은 그렇지 않습니다. –

답변

1

업데이트 작업을 [FromBody] 속성

[HttpPost] 
public async Task<IActionResult> Login([FromBody]LoginModel model) { 
    //...code removed for brevity 
} 

를 참조 Asp.Net Core: Model Binding를 사용하여 요청 본문의 내용을 확인합니다