У меня есть проект WebApi 2.0. У меня есть два контроллера. Один работает как положено, другой дает мне 404. Рабочий контроллер:
namespace SubscriptionApi.Controllers
{
using System.Threading.Tasks;
using System.Web.Http;
using Models.Services;
[RoutePrefix("api/SubscriptionCheck")]
public class SubscriptionCheckController : ApiController
{
public SubscriptionCheckController(IQuerySubscription queryService)
{
QueryService = queryService;
}
private IQuerySubscription QueryService { get; }
[HttpGet]
[Route("Get/{email}/{productCode}")]
public async Task<bool> Get(string email, string productCode)
{
return await QueryService.IsSubscribed(email, productCode);
}
}
}
В своем браузере я могу запустить приложение и ввести http://localhost:55816/api/SubscriptionCheck/Get/bob@place.org/PRD в браузер. Он возвращает истину или ложь, как я ожидаю. Отказ контроллера очень похож.
namespace SubscriptionApi.Controllers
{
[RoutePrefix("api/RepresentativeCheck")]
public class RepresentativeCheckController : ApiController
{
public RepresentativeCheckController(IQuerySubscription queryService)
{
QueryService = queryService;
}
private IQuerySubscription QueryService { get; }
[HttpGet]
[Route("Get/{email}")]
public async Task<bool> Get(string email)
{
return await QueryService.IsPrimaryOrAlternateRepresentative(email);
}
}
}
Когда приложение запущено, я ввожу http://localhost:55816/api/RepresentativeCheck/Get/bob@place.org, и оно сообщает «Ошибка HTTP 404.0 - Не найдено»
Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступен. "
В global.asax нет ничего странного:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
WebApi настраивается перед страницами MVC. Используя атрибутную маршрутизацию, я не ожидал бы, что таблицы маршрутов окажут какое-либо влияние, но для полноты:
public static void Register(HttpConfiguration config)
{
config.RegisterResolver();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
);
}
У меня возникли проблемы с разницей между SubscriptionCheck, который работает нормально, и PresidentCheck, который обращается ко мне 404. Любая помощь приветствуется.
Windows 10, VS Pro 2017 15.8.8, IIS Express