Web api показывает ошибку 403.14, когда localhost: номер порта находится в адресе браузера в iis express

Это должно быть что-то действительно немым, но я не могу думать, что еще делать.

Используя Visual Studio 2013 - обновление 1, я создал пустой веб-проект api 2 в существующем решении, добавил пакет поддержки кросс-кантов (cors) и создал базовый веб-контроллер api.

Класс WebApiConfig выглядит нормально:

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        var cors = new EnableCorsAttribute("*","*","*");
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();

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

А также Global.asax

    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

Затем я запускаю приложение, экспресс-рассылка IIS начинается нормально, а браузер начинается с URL-адреса приложения, но ничего не работает.

Если URL-адрес "localhost: номер порта", я получаю Ошибка HTTP 403.14 - Запрещено Веб-сервер настроен так, чтобы не отображать содержимое этого каталога.

Если я попробую "localhost: номер порта /api ", я получаю Ошибка HTTP 404.0 - не найден Ресурс, который вы ищете, был удален, изменил его имя или временно недоступен.

Я просмотрел несколько блогов, уроки, примеры, и я нигде не видел, что нужно что-то особенное сделать. Может ли кто-то пролить некоторый свет в том, что я могу пропустить?

Ответы

Ответ 1

Web Api не имеет отображаемой по умолчанию страницы (aspx, html и т.д.), которую можно просмотреть, перейдя к корню (localhost:port в этом случае). Так что это нормальное поведение. Чтобы получить доступ к вашему Api через контроллер, вам необходимо получить к нему доступ, используя шаблон маршрута, указанный в вашем методе MapHttpRoute().

Итак, чтобы получить доступ к методу GET в вашем Api, вы откроете браузер и поместите localhost:port/api/{controllername} в URL-адрес. {controllername} будет установлено имя вашего класса контроллера без добавления контроллера в конец.

ex: Если ваш контроллер выглядел так:

public class TestController : ApiController {
    public HttpResponseMessage Get() {
          return something;
    }

    public HttpResponseMessage Get(int id) {
          return something with id;
    } 
}

Тогда ваш url для первого Get() будет выглядеть так:

localhost:port/api/test

И URL для второго Get(int id) будет выглядеть так:

localhost:port/api/test/5

Ответ 2

Если ваша конфигурация маршрута в порядке, вы можете попробовать добавить это в Web.config:

<system.webServer>
 <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>