2017-12-08 16 views
-1

Visual Studio 2017で動作するサンプル.NET Core 2.0 WebApiコードがありますが、Visual Code 1.18では同じコードが機能しません。 POSTコマンドに400 Bad Requestが返されます。 GETコマンドは、両方で動作します。 Visual Studio 2017でファイルや設定が欠落している必要があります。 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コードの場合、私はPostmanを使用している間はボディに何も持っていませんでしたが、もちろん[FormBody]パラメータがnullだったので、Bad Requestメッセージが表示されます。