Arhn - архитектура программирования

Абстрактный метод контроллера не распознается, а конкретный —

Итак, я делаю небольшой рефакторинг в нашем проекте веб-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

Ответы:


1

Унаследованный атрибут контролирует, наследуют ли подклассы какой-либо конкретный атрибут от суперкласса. Значение по умолчанию верно.

К сожалению, для вашего рефакторинга оба атрибута RouteAttribute и RoutePrefixAttribute являются закрытыми классами с Inherited = false. Вам нужно будет специально объявить эти атрибуты во всех ваших конкретных классах и методах контроллера.

11.04.2017
  • Я не понимаю.. мой атрибут RoutePrefix помещается в мой конкретный класс, а что еще в том, что я декомпилировал Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll (это сборка, которую мой проект использует для этого атрибута), а RouteAttribute был помечен как Inherited = true Я немного удивлен, что msdn показывает противоположный.. 11.04.2017
  • Этот ответ ошибочен. просмотреть связанный дубликат. 11.04.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..