2017-09-26 8 views
0

저는 Asp.Net Core 2.0과 웹 API를 사용하여 휴식 서비스를 만들고 있습니다. HTTPPost를 제외하고 모두 제대로 작동합니다.매개 변수의 원인은 무엇입니까?

[HttpPost("LoginUser")] 
public IActionResult LoginUser(LoginUser loginUser) 
{ 
    return Ok(loginUser); 
} 

loginUser는 항상 null입니다. 내가 피들러와 함께 테스트입니다 내 노선은 http://localhost:53250/api/User/LoginUser

이며, 몸은

{"EmailAddress":"[email protected]","Password":"123456789"} 

피들러가 잘 링크를 맞았지만, 페이로드는 항상 null입니다.

나는 또한이 경우

[HttpPost("LoginUser")] 
public IActionResult LoginUser([FromBody] LoginUser loginUser) 
{ 
    return Ok(loginUser); 
} 

을 시도,이 기능을 공격하지 않습니다.

public class LoginUser 
{ 
    public string EmailAddress { get; set; } 
    public string Password { get; set; } 
} 

어떤 아이디어 :

이것은 LoginUser 정의는?

+0

로컬로 테스트되었으며 작동합니다. Postman으로 테스트하고, Post, Body-> Raw를 선택하고 JSON을 입력하십시오. 나를 위해 잘 작동했습니다. – hardkoded

+1

또한 작업이 'void'가 아니어야 함을 유의하십시오. 'IActionResult'를 반환하십시오 – Nkosi

+0

우편 배달부와 같은 결과입니다. 코어 2.0을 사용하고 있습니까? –

답변

0

문제가 해결되었습니다. UserController를 추가 할 때 클래스로 작성하여 컨트롤러에서 파생되었습니다. 삭제하고 새 항목으로 추가하고 웹 API 코어 컨트롤러를 선택했습니다. 이제는 모두 잘 작동합니다. 당신의 도움을 주셔서 감사합니다.

0

JSON 구문 분석은 대/소문자를 구분합니다. JSON이 잘못된 경우입니다. 해야합니다 : { "EmailAddress": "[email protected]", "Password": "123456789"}.

+0

죄송합니다, Visual Studio에서 변환을 복사했습니다. {{EmailAddress ":"[email protected] ","Password ":"123456789 "} 피들러에서 보내는 메일은 다음과 같습니다. –

1

귀하의 조치가 있어야한다 :

[Route("api/[controller]")] 
public class UserController : Controller 
{ 
    [HttpPost("LoginUser")] 
    public IActionResult LoginUser([FromBody] LoginUser loginUser) 
    { 
     return Ok(loginUser); 
    } 
} 

참조는 [HttpPost("LoginUser")]는 경로에 영향을 미치고 LoginUser 개체 유형과 관련되지 않습니다.

업데이트 : ASP.NET 코어 model binding[FromForm] 바인딩 소스로 보이는 ASP.NET 코어로 [FromBody]이 필요합니다. [FromBody] 속성은 매개 변수를 요청 본문의 데이터에 바인딩하려는 것을 나타냅니다.

업데이트 2 : 요청할 경우 Content-Type: application/json 헤더를 추가해야합니다. ASP.NET 코어는이 헤더를 기반으로 입력 포맷터를 선택합니다.

업데이트 3 : 본문 데이터를 원시 문자열로 가져와야하는 경우 ASP.NET Core MVC : How to get raw JSON bound to a string without a type?을 살펴보십시오. 사용을 제안합니다 [FromBody] dynamic data

+0

나는 그것을 안다. 하지만 HTTP 호출에 유효한 LoginUser 함께 본문 개체를 전달하고 있습니다. 아직 null입니다 ... –

+0

@JohnBaird 실제로이 솔루션을 사용해 보셨습니까? 내게 맞는 것 같아. – Brad

+0

@JohnBaird에'Content-Type : application/json' 헤더를 추가 했습니까? 본문에서 json 데이터를 전달하면 해당 모델'LoginUser' => 두 번째 예 ([FromBody] string loginUser)에서와 같이 본문을 '문자열'로 기대하는 것은 이치에 맞지 않습니다. – Set

0
  • 요청 모델에서 {get; private set;}으로 설정된 속성이있는 경우 값이 채워지지 않습니다. private을 삭제하여 공개합니다. 또한 생성자 은 사용되지 않습니다.

  • 본문에서 일반 텍스트를 읽는 경우 [FromForm] 이 작동하는지 확인하십시오.