Итак, я делаю небольшой рефакторинг в нашем проекте веб-API и заметил, что будет хорошо извлечь один из контроллеров в абстрактном классе со всеми необходимыми атрибутами, поэтому я сделал следующее:
извлек абстрактный класс и метод из моего существующего контроллера:
[RoutePrefix("api/auth")] public class AdminController : BaseAdminController
Итак, BaseAdminController
выглядит так:
public abstract class BaseAdminController : BaseApiController
{
[HttpGet]
[Route("validatetoken")]
public abstract IHttpActionResult ValidateToken(string token);
}
Это маршрутизация, которую я использую:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/"
);
}
Теперь я заметил, что при тестировании кода с абстрактным контроллером он выдает броски:
Не найден тип, соответствующий контроллеру с именем «auth».
В то время как та же реализация, но без абстрактного класса и метода, работает просто отлично.
Я тестирую этот URL:
http://localhost:60747/api/auth/validatetoken?auth_token=117a2686-dad3-4b1e-a5eb-94aebed45d06
RoutePrefix
помещается в мой конкретный класс, а что еще в том, что я декомпилировалMicrosoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll
(это сборка, которую мой проект использует для этого атрибута), а RouteAttribute был помечен какInherited = true
Я немного удивлен, что msdn показывает противоположный.. 11.04.2017