2014-10-13 5 views
2

나는 다음과 같은 JSON을 보내고있다 작동하지 :모델 바인더는 POST를 통해 JSON POST와

POST http://localhost:52873/news 

{"text":"testing","isPublic":true} 

내 컨트롤러 :

public class NewsController : Controller 
{ 
    // GET: /<controller>/ 
    [HttpGet] 
    public IActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public IActionResult Post(CreatePostCommand command) 
    { 
     /* ...more code... */ 
     return new HttpStatusCodeResult(200); 
    } 
} 

그리고 명령은 다음과 같습니다

public class CreatePostCommand 
{ 
    public string Text { get; set; } 
    public bool IsPublic { get; set; } 
} 

내 경로 설정은 VS 2014 CTP 4의 MVC 템플릿과 함께 제공되는 기본값입니다.

Getting Started with ASP.NET MVC 6에서 6,
app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "default", 
     template: "{controller}/{action}/{id?}", 
     defaults: new { controller = "Home", action = "Index" }); 

    routes.MapRoute(
     name: "api", 
     template: "{controller}/{id?}"); 
}); 

인용구 :

이 경로 템플릿을 사용하여이 작업 이름은 요청의 HTTP 동사에 매핑됩니다. 예를 들어 GET 요청은 Get이라는 메서드를 호출하고 PUT 요청은 Put이라는 메서드를 호출합니다. {controller} 변수는 여전히 컨트롤러 이름에 매핑됩니다.

이것은 나를 위해 작동하지 않습니다. 404 오류가 발생합니다. 이 새로운 ModelBinder는 무엇이 없습니까? 왜 내 JSON POST 메시지를 바인딩하지 않습니까?

+0

이 JSON의 경우 중요한가 –

+0

아약스 방법에 대한 스크립트를 추가 하시겠습니까? 그래서'text'는'Text'이어야합니까? – DavidG

+1

또한 경로 설정이 무엇입니까? – DavidG

답변

3

  • [HttpPost] 속성을 제거하고,
  • 이 속성 유형 전에 [FromBody] 속성을 추가 한 후 그것은 작동합니다.

수정 된 코드 :

// No HttPost attribute here! 
public IActionResult Post([FromBody]CreatePostCommand command) 
{ 
    /* ...more code... */ 
    return new HttpStatusCodeResult(200); 
} 
+1

흥미로운, 어떤 생각? –

+0

좋은 생각이 들지 않습니다. 그것은 MS 친구들을위한 질문입니다. 그러나 여전히 알파 4에 있으므로 최종 릴리스까지 변경 될 수 있습니다. –

+1

팁 주셔서 감사. 베타 4가 실행 중이며 여전히 필요합니다. –