Kalai Selvi Ответов: 1

Удалить способ действия веб-API не было вызвано.


У меня есть контроллер web api в моем проекте MVC следующим образом

public class EmployeeController : ApiController
{
    static readonly IEmployeeRepository repository = new EmployeeRepository();
    // GET api/<controller>
    [HttpGet]
    public object Get()
    {
        var queryString = HttpContext.Current.Request.QueryString;
        var data = repository.GetAll().ToList();
        return new { Items = data, Count = data.Count() };
    }

    public Employee GetEmployee(int id)
    {
        Employee emp = repository.Get(id);
        if (emp == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return emp;
    }

    // POST api/<controller>
    public HttpResponseMessage PostEmployee(Employee emp)
    {
        emp = repository.Add(emp);
        var response = Request.CreateResponse<Employee>(HttpStatusCode.Created, emp);

        string uri = Url.Link("Employee", new { id = emp.EmployeeID });
        response.Headers.Location = new Uri(uri);
        return response;
    }
    [HttpPut]
    // PUT api/<controller>
    public void PutEmployee(Employee emp)
    {
        if (!repository.Update(emp))
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
     }
     [HttpDelete]
     public void Delete(int id)
     {
         Employee emp = repository.Get(id);
         if (emp == null)
         {
             throw new HttpResponseException(HttpStatusCode.NotFound);
         }
         repository.Remove(id);
     }
}


Для меня добавить(поставить), получения (GET) и обновление (Post) способ получения срабатывает

Но метод Delete не срабатывает

И мой URL-адрес метода удаления :

http://localhost:63187/api/Employee/2

и мой Webapicongif. cs

public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "Employee",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        //config.EnableQuerySupport();
    }

и глобальный файл. cs выглядит следующим образом

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

        GlobalConfiguration.Configure(WebApiConfig.Register);

        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

    }


Что я уже пробовал:

Когда я выполняю операцию удаления,

я получил сообщение об ошибке

Сообщение : "не найден HTTP-ресурс, соответствующий URI запроса 'http://localhost:63187/api/Employee/2".

MessageDetail
:
"На контроллере" сотрудник "не было обнаружено никаких действий, соответствующих имени "2"."
Имя

Общие:

URL запроса: http: / / localhost:63187 / api/Employee/2
Метод запроса: удалить
Код Состояния:404 Не Найден
Удаленный Адрес: [:: 1]: 63187

заголовок ответа

Доступ-контроля-разрешить-методы:сделать, пост, ставить, удалять, варианты
Cache-Control:no-cache
Содержание-Длина:204
Content-Type:application/json; charset=utf-8
Дата:Чт, 30 марта 2017 12: 00:21 GMT
Срок действия: -1
Pragma:no-cache
Сервер: Microsoft-IIS/10.0
X-AspNet-Версия:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?RDpcU2FtcGxlXE1WQ1xEYXRhTWFuYWdlclxbzgfwdg9yc1xtyw1wbgvcyxbpxevtcgxvewvlxdi=?=

заголовок запроса

Принимать:*/*
Accept-кодирование:gzip, deflate, sdch, br
Accept-Language:en-US, en; q=0.8
Связь:держите-живой
Содержание-Длина:1
Content-Type:application/json; charset=UTF-8
DataServiceVersion: 2.0
Хост:localhost: 63187
MaxDataServiceVersion: 2.0
Происхождение: http: / / localhost: 63187
Реферер:http: / / localhost:63187/CRUDRemote/Remove
Пользовательский агент: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/56.0.2924.87 Safari/537.36
X-Requested-With:XMLHttpRequest

Запрос Полезной Нагрузки

2

Где я совершаю ошибку.

Richard Deeming

Вы проверили, что в вашей базе данных действительно есть сотрудник с таким идентификатором?

Kalai Selvi

да, я это проверил.

Richard Deeming

Попробуйте отладить маршруты:
Отладка ASP.NET веб-API с отладчиком маршрутов[^]

1 Ответов

Рейтинг:
9

Kalai Selvi

Наконец-то я нашел проблему, я сделал ошибку в Global. cs и WebApiConfig

Обновленная Глобальная.КС подал

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

        //GlobalConfiguration.Configure(WebApiConfig.Register);

        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);


    //    WebApiConfig.Register(GlobalConfiguration.Configuration);
    }



и WebApiConfig

public static void Register(HttpConfiguration config)
    {
        //config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
                        name: "Employee",
                        routeTemplate: "api/{controller}/{id}",
                        defaults: new { id = RouteParameter.Optional }
                    );
        //config.EnableQuerySupport();
    }

Теперь срабатывает действие удаления.