Я не могу получить доступ к новому контроллеру веб-API, который я создал в существующем проекте. - PullRequest
0 голосов
/ 07 мая 2020

В существующем проекте ASP. NET MVC я создал новый контроллер веб-API.

namespace EMSMVC.Controllers
{
    public class TabletController : ApiController
    {
        public Call Get(int call_id)
        {
            using(EMSMVCEntities entities = new EMSMVCEntities())
            {
                return entities.Calls.FirstOrDefault(e => e.call_id == call_id);
            }
        }
    }
}

Когда я пытаюсь получить к нему доступ через браузер, используя:

http://localhost:53366/Tablet/Call/157

Я получаю сообщение об ошибке:

Ошибка сервера в приложении '/'. Ресурс не найден.

Мой RouteConfig.cs содержит:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
        );
    }
}

Файл WebApiConfig.cs содержит:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

Существующие контроллеры работает нормально.

Ответы [ 4 ]

1 голос
/ 08 мая 2020

Попробуйте эти два варианта:

Вариант 1. Используйте следующий URL:

http://localhost:53366/Tablet/Call?call_id=157

Вариант 2. Измените код, например:

[RoutePrefix("tablet/services")]
public class TabletController : ApiController
{

    [Route("getcall")]
    [HttpGet, ActionName("getcall")]
    public Call Get(int call_id)
    {
        using (EMSMVCEntities entities = new EMSMVCEntities())
        {
            return entities.Calls.FirstOrDefault(e => e.call_id == call_id);
        }
    }
}

, а затем попробуйте вызовите его по следующему URL-адресу:

http://localhost:53366/tablet/services/getcall/157

OR

http://localhost:53366/tablet/services/getcall?call_id=157
1 голос
/ 08 мая 2020

Не могли бы вы изменить подпись действия как [HttpGet] publi c Вызов Get (int id) и доступ как localhost: 53366 / api / Tablet / 157

При возникновении проблем с сериализацией выполните убедитесь, что сериализация в модели "Call" и "httpclient" синхронизирована c.

Подробнее о 'ObjectContent`1': не удалось сериализовать ответ от DbSet

0 голосов
/ 07 мая 2020

Попробуйте http://localhost: 53366 / Tablet / Get / 157

, если по-прежнему не работает, добавьте [HttpGet], как показано ниже

[HttpGet] publi c Получение вызова (int call_id)

0 голосов
/ 07 мая 2020

В {controller}/{action}/{id}, {action} - это имя метода, которое в вашем контроллере - Get. В вашем URL-адресе (http://localhost:53366/Tablet/Call/157) у вас есть Call, который является типом возврата вашего метода. Попробуйте перейти к http://localhost:53366/Tablet/Get/157

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...