Je débute dans ce domaine et je suis ce tutoriel sur les API web .Net ASP.NET mais je n'arrive pas à résoudre cette erreur. Lorsque je fais "Tester la méthode GetTodoItems" et que j'utilise Postman pour communiquer avec la base de données.
Lorsque je lance le débogage, Chrome s'ouvre et l'erreur suivante est affichée:
System.InvalidOperationException: 'Les erreurs suivantes se sont produites avec ces informations de routage par attribut:
Erreur 1: Pour l'action: 'TodoApi.Controllers.TodoController.GetTodoItems (TodoApi)' Erreur: Lors du traitement du modèle 'api/[TodoController]', une valeur de remplacement pour le jeton 'TodoController' n'a pas pu être trouvée. Jetons disponibles: 'action, controller'. Pour utiliser '[' ou ']' comme chaîne littérale dans une route ou dans une contrainte, utilisez '[[' ou ']]' à la place.
Erreur 2: Pour l'action: 'TodoApi.Controllers.TodoController.GetTodoItem (TodoApi)' Erreur: Lors du traitement du modèle 'api/[TodoController]/{id}', une valeur de remplacement pour le jeton 'TodoController' n'a pas pu être trouvée. Jetons disponibles: 'action, controller'. Pour utiliser '[' ou ']' comme chaîne littérale dans une route ou dans une contrainte, utilisez '[[' ou ']]' à la place.
Voici mon code de contrôleur tel quel du tutoriel:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TodoApi.Models;
namespace TodoApi.Controllers
{
[Route("api/[TodoController]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Crée un nouveau TodoItem si la collection est vide,
// ce qui signifie que vous ne pouvez pas supprimer tous les TodoItems.
_context.TodoItems.Add(new TodoItem { Name = "Item1" });
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task>> GetTodoItems()
{
return await _context.TodoItems.ToListAsync();
}
// GET: api/Todo/5
[HttpGet("{id}")]
public async Task> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null)
{
return NotFound();
}
return todoItem;
}
}
}
Voici le fichier startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TodoApi.Models;
namespace TodoApi
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// Cette méthode est appelée par l'exécution. Utilisez cette méthode pour ajouter des services au conteneur.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(opt =>
opt.UseInMemoryDatabase("TodoList"));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// Cette méthode est appelée par l'exécution. Utilisez cette méthode pour configurer le pipeline de requête HTTP.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// La valeur HSTS par défaut est de 30 jours. Vous voudrez peut-être la modifier pour des cas
// de production, voir https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
}