Web Api 2 - не найден HTTP-ресурс, соответствующий URI запроса.

В моем решении есть проект MVC, в котором также есть ApiControllers. Я настроил проект в IIS и добавил его в файл hosts.

Маршрут выглядит так:

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

Я добавил контроллер под названием TestController в папку Project.Web / Controllers, и у него есть один метод, который просто возвращает такую ​​строку:

public class TestController : ApiController
{
    public string Get()
    {
        return "Test";
    }
}

Если я попытаюсь зайти на свой сайт через mysite.local / api / test / get, я получу следующую ошибку:

{
  "Message": "No HTTP resource was found that matches the request URI 'http://mysite.local/api/test/get'.",
  "MessageDetail": "No type was found that matches the controller named 'test'."
}

Но если я запустил веб-сайт из Visual Studio 17, я смогу получить доступ к localhost: portnr / api / test / get без каких-либо ошибок.

Я безуспешно пытался добавить [Route()] и [RoutePrefix()]. Я также безуспешно пытался переместить Apicontroller в Project.Web / Controllers / Api.

Кто-нибудь знает, почему я могу связаться с ним через localhost, но не через имя домена?

С уважением, Дэвид


person David Nyqvist    schedule 28.03.2017    source источник


Ответы (1)


Вам не нужно передавать имя, если у вас есть метод действия с именем Get.

Вам необходимо вернуть изменения в конфигурации маршрута к конфигурации по умолчанию. Если вы хотите использовать настраиваемую маршрутизацию, используйте аннотацию Route.

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

API поймет по умолчанию, если вы перейдете по URL-адресу "http://sampleweb.com/api/test", это вызовет ваш Get метод.

person Sulay Shah    schedule 28.03.2017
comment
Привет, Сулей, Да, я знаю, что он поймет это по умолчанию, но та же проблема произойдет, даже если попробуешь mysite.local / api / test или mysite.local / api / test / get Я пробовал добавив routeTemplate: api / {controller} / {action} / {id}, поскольку нам нужно несколько HttpGet в API, но мы все равно получаем то же сообщение об ошибке. - person David Nyqvist; 29.03.2017
comment
У вас есть платформа .net, зарегистрированная в вашем IIS? - person Sulay Shah; 30.03.2017
comment
Да, у меня есть платформа .net, зарегистрированная в IIS, и да, локальный хост работает с iis express - person David Nyqvist; 30.03.2017