Как мне справиться с этой ошибкой проекта webapi? - PullRequest
0 голосов
/ 16 января 2020

Я делаю основной проект WebApi для школы, и все выглядело хорошо, пока я не решил запустить проект для его тестирования. Когда я запускаю его, появляется эта ошибка https://imgbbb.com/images/2020/01/16/error.png

Вот все, из чего состоит мой проект:

project tree

А вот код контроллера:

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using webapi3.Models;
using webapi3.Models.Repository;
using RouteAttribute = Microsoft.AspNetCore.Components.RouteAttribute;

namespace webapi3.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class EmployeeController : ControllerBase
    {
        private readonly IDataRepository<Employee> _dataRepository;

        public EmployeeController(IDataRepository<Employee> dataRepository)
        {
            _dataRepository = dataRepository;
        }

        // GET: api/Employee
        [HttpGet]
        public IActionResult Get()
        {
            IEnumerable<Employee> employees = _dataRepository.GetAll();
            return Ok(employees);
        }

        // GET: api/Employee/5
        [HttpGet("{id}", Name = "Get")]
        public IActionResult Get(long id)
        {
            Employee employee = _dataRepository.Get(id);

            if (employee == null)
            {
                return NotFound("The Employee record couldn't be found.");
            }

            return Ok(employee);
        }

        // POST: api/Employee
        [HttpPost]
        public IActionResult Post([FromBody] Employee employee)
        {
            if (employee == null)
            {
                return BadRequest("Employee is null.");
            }

            _dataRepository.Add(employee);
            return CreatedAtRoute(
                  "Get",
                  new { Id = employee.EmployeeId },
                  employee);
        }

        // PUT: api/Employee/5
        [HttpPut("{id}")]
        public IActionResult Put(long id, [FromBody] Employee employee)
        {
            if (employee == null)
            {
                return BadRequest("Employee is null.");
            }

            Employee employeeToUpdate = _dataRepository.Get(id);
            if (employeeToUpdate == null)
            {
                return NotFound("The Employee record couldn't be found.");
            }

            _dataRepository.Update(employeeToUpdate, employee);
            return NoContent();
        }

        // DELETE: api/Employee/5
        [HttpDelete("{id}")]
        public IActionResult Delete(long id)
        {
            Employee employee = _dataRepository.Get(id);
            if (employee == null)
            {
                return NotFound("The Employee record couldn't be found.");
            }

            _dataRepository.Delete(employee);
            return NoContent();
        }
    }
}

Если кто-нибудь поможет мне, будьте очень благодарны! Заранее спасибо!

1 Ответ

0 голосов
/ 16 января 2020

Попробуйте изменить [controller] на "Employee" в [Route ("api / [controller]")]. Посмотрите этот пример в Microsoft 1

Замените [controller] на имя контроллера, которое по соглашению является именем класса контроллера без суффикса «Controller». В этом примере имя класса контроллера - TodoItemsController, поэтому имя контроллера - «TodoItems». ASP. NET В основной маршрутизации регистр не учитывается.

Другой вариант - проверить файл Startup.cs (опубликуйте его здесь, чтобы мы могли проверить, все ли в порядке). И проверьте этот пример, объясняя маршрут атрибута в. NET Маршрутизация атрибута

    public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

        // Convention-based routing.
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
...