У меня есть asp.net web api с Unity
как мой зависимый преобразователь и OWIN
для аутентификации OAuth.ASP.NET WebApi не работает. Все маршруты возвращаются 404
я создаю Startup.cs
с помощью Visual Studio "Add New Item" -MENU, выбирая Owin Startup класс:
[assembly: OwinStartup(typeof(MyNameSpace.Startup))]
namespace MyNameSpace
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
config.DependencyResolver = new UnityHierarchicalDependencyResolver(UnityConfig.GetConfiguredContainer());
app.UseWebApi(config);
}
}
}
Мои WebApiConfig.cs
выглядит следующим образом:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Теперь, когда Я запускаю приложение, я получаю ответ Forbidden для URL-адреса по умолчанию, который равен http://localhost:port/
. Веб-api размещен по адресу http://localhost:port/api/
. Когда я делаю запрос на этот url или любой контроллер в приложении, он отвечает Не найдено.
Кроме того, когда я поставил точку останова в методе Configuration
класса Startup
; когда я запустить приложение отображает следующую (я не знаю, если это уместно):
Я не могу понять, что случилось. Он работал прошлой ночью, и я единственный, кто работал над этим проектом. Единственное, что я сделал, это добавить OData
ссылки от NuGet
, но я удалил их снова, как только установил, что api не работал.
EDIT:
Я хотел бы добавить, что любой точка останова я поставил в приложении в данный момент отображается тем же сообщение, когда я зависать над ним, так что, возможно, этим отношением в конце концов.
EDIT 2:
Это отрывок из EmployeeController.cs
:
[Authorize]
public class EmployeeController : ApiController
{
private readonly IEmployeeService _service;
public EmployeeController(IEmployeeService employeeService)
{
_service = employeeService;
}
[HttpGet]
[ResponseType(typeof(Employee))]
public IHttpActionResult GetEmployee(string employeeId)
{
var result = _service.GetEmployees().FirstOrDefault(x => x.Id.Equals(employeeId));
if (result != null)
{
return Ok(result);
}
return NotFound();
}
[HttpGet]
[ResponseType(typeof (IQueryable<Employee>))]
public IHttpActionResult GetEmployees()
{
return Ok(_service.GetEmployees());
}
...
EDIT 3
После перезапуска Visual Studio, как предложил я могу подтвердить, что предупреждение точка останова сохраняется и отображается по всей заявке:
EDIT 4
OWIN
Удаление ссылок и Startup.cs
, приложение теперь отскакивает назад в жизнь. Я могу снова разместить точки останова и совершать вызовы api. Что происходит?
Вы можете показать одно из ваших действий с API? –
Я отредактировал мой вопрос, чтобы включить код с контроллера. –
Эта проблема с точкой останова обычно разрешается при перезапуске Visual Studio. –