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>