2017-12-08 2 views
-1

Visual Studio 2017에서 작동하지만 Visual 코드 1.18에서 동일한 코드가 작동하지 않는 샘플 .NET Core 2.0 WebApi 코드가 있습니다. POST 명령에 400 Bad Request가 표시됩니다. GET 명령은 두 가지 모두에서 작동합니다. Visual Studio 2017에서 일부 파일이나 설정이 누락되었습니다. Visual Studio 코드에서 내가 잘못하고있는 것을 아는 사람이 있습니까?Visual Studio 코드 400 나쁜 요청

다음은 컨트롤러에 대한 코드의 피터

당신에게 감사 : 자신의 시간을 낭비 모두에게

using System.Collections.Generic; 
using Microsoft.AspNetCore.Mvc; 
using TodoApi.Models; 
using System.Linq; 

namespace TodoApi.Controllers 
{ 
    [Route("api/[controller]")] 
    public class TodoController : Controller 
    { 
     private readonly TodoContext _context; 

     public TodoController(TodoContext context) 
     { 
      _context = context; 

      if (_context.TodoItems.Count() != 0) return; 
      _context.TodoItems.Add(new TodoItem { Name = "Item1" }); 
      _context.SaveChanges(); 
     } 

     [HttpGet] 
     public IEnumerable<TodoItem> GetAll() 
     { 
      return _context.TodoItems.ToList(); 
     } 

     [HttpGet("{id}", Name = "GetTodo")] 
     public IActionResult GetById(long id) 
     { 
      TodoItem item = _context.TodoItems.FirstOrDefault(t => t.Id == id); 
      if (item == null) 
      { 
       return NotFound(); 
      } 
      return new ObjectResult(item); 
     } 

     [HttpPost] 
     public IActionResult Create([FromBody] TodoItem item) 
     { 
      if (item == null) 
      { 
       return BadRequest(); 
      } 

      _context.TodoItems.Add(item); 
      _context.SaveChanges(); 

      return CreatedAtRoute("GetTodo", new { id = item.Id }, item); 
     } 

     [HttpPut("{id}")] 
     public IActionResult Update(long id, [FromBody] TodoItem item) 
     { 
      if (item == null || item.Id != id) 
      { 
       return BadRequest(); 
      } 

      TodoItem todo = _context.TodoItems.FirstOrDefault(t => t.Id == id); 
      if (todo == null) 
      { 
       return NotFound(); 
      } 

      todo.IsComplete = item.IsComplete; 
      todo.Name = item.Name; 

      _context.TodoItems.Update(todo); 
      _context.SaveChanges(); 
      return new NoContentResult(); 
     } 

     [HttpDelete("{id}")] 
     public IActionResult Delete(long id) 
     { 
      TodoItem todo = _context.TodoItems.FirstOrDefault(t => t.Id == id); 
      if (todo == null) 
      { 
       return NotFound(); 
      } 

      _context.TodoItems.Remove(todo); 
      _context.SaveChanges(); 
      return new NoContentResult(); 
     } 
    } 
} 
+0

POST 메서드 내에 중단 점을 넣고 디버깅 할 때 어떤 일이 발생합니까? – mjwills

+0

Visual Studio 코드가 응용 프로그램을 어떻게 실행합니까? IIS, IIS Express 또는 HttpSys? 또한 IIS 또는 HttpSys에서 실행하려면 코드 내에서 실행되는 경우 관리자 권한으로 승격해야합니다. – Greg

+2

POST 명령을 어떻게 보냅니 까? 우편 배달부 에서요? 크롬? 다른 것? – mjwills

답변

0

죄송합니다!

Visual Studio 코드의 경우 우편 발송자를 사용하는 동안 Body에 아무 것도 없었으며 물론 [FormBody] 매개 변수가 null 이었기 때문에 잘못된 요청 메시지가 표시됩니다.