Nano Hash - криптовалюты, майнинг, программирование

Маршрутизация в модуле DNN SPA не работает должным образом

Кажется, я не могу понять, как получить доступ к методам на одном из моих контроллеров, контроллер настроек работает без проблем...

ServiceRouteMapper:

public void RegisterRoutes(IMapRoute mapRouteManager)
{
       mapRouteManager.MapHttpRoute(
           moduleFolderName: "ImportantDatesModule",
           routeName: "default",
           url: "{controller}/{action}/{id}",
           defaults: new { id = RouteParameter.Optional },
           namespaces: new[] { "company.ImportantDatesModule.Services" });
}

Контроллер:

[SupportedModules("ImportantDatesModule")]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]
public class ItemController : DnnApiController
...

[HttpGet]
[ActionName("getItems")]
public HttpResponseMessage GetItems() 
{
    return Request.CreateResponse(HttpStatusCode.OK, "success");
}

Файл JS, который выполняет вызов:

dnnspamodule.itemsViewModel = function (moduleId, resx) {
var service = {
    path: "ImportantDatesModule",
    framework: $.ServicesFramework(moduleId),
    controller: "Item"
}
service.baseUrl = service.framework.getServiceRoot(service.path);
...

var getItems = function () {
    var restUrl = service.baseUrl + service.controller + "/getItems";
    console.log(restUrl);

    isLoading(true);
    var jqXHR = $.ajax({
        url: restUrl,
        beforeSend: service.framework.setModuleHeaders,
        dataType: "json"
    }).done(function (data) {
        if (data) {
            load(data);
            isLoading(false);
        }
        else {
            // No data to load 
            itemList.removeAll();
        }
    }).always(function (data) {

    });
};

  • Можете ли вы добавить метод ajax .fail() для получения кода ошибки http. Это 401, 404? 17.08.2018
  • Это ошибка 500, но если вы посмотрите ответ, это будет 404. (Код ответа не указывает на успех: 404 (не найдено)) 17.08.2018

Ответы:


1

Я не знаю, как выглядит ваш контроллер настроек, но, возможно, попробуйте разделить ваши маршруты на стиль действий ({controller}/{action}) и маршруты в стиле rest ({controller}/{id} + производный глагол в имени метода ). Попробуйте это в своем сервисном картографе:

mapRouteManager.MapHttpRoute(
    moduleFolderName: "ImportantDatesModule",
    routeName: "default", 
    url: "{controller}/{action}",
    namespaces: new[] {"company.ImportantDatesModule.Services"});

mapRouteManager.MapHttpRoute(
    moduleFolderName: "ImportantDatesModule",
    routeName: "rest",
    url: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    namespaces: new[] { "company.ImportantDatesModule.Services" });
17.08.2018
  • извините, что я так долго не отвечал, у меня была пара других задач, которые я должен был выполнить, прежде чем вернуться к этому. Оказывается, моя проблема была вызвана остаточным модулем, который, как я думал, я удалил, вернув свою базу данных. Который не удалил/изменил файлы, которые модифицировал модуль. Я исправил эту проблему, и теперь я получаю 401 (неавторизованный) какие-либо идеи, что может случиться, исходя из моей конфигурации, как показано в вопросе? 22.08.2018
  • @JohnKane — закомментируйте атрибуты SupportedModules и DnnModuleAuthorize в вашем классе ItemController и добавьте [AllowAnonymous]. Затем проверьте, получили ли вы правильный ответ. Если это так, закомментируйте allowanonymous и раскомментируйте остальные атрибуты по одному. Если проблема связана с атрибутом SupportedModules, попробуйте изменить значение для ‹moduleName› в файле манифеста, чтобы оно также было ImportantDatesModule. Мне нравится следить за тем, чтобы мое имя модуля (под типом компонента = модуль) в манифесте совпадало с именем папки модуля в маршруте. 22.08.2018
  • Я закомментировал поддерживаемые модули и авторизацию модуля dnn и добавил их в AllowAnonymous, и я все еще вижу ошибку 401... это кажется действительно странным. Есть ли разница, если вы поместите анонимный доступ на уровне класса или метода? 22.08.2018
  • AllowAnonymous на уровне класса должен применяться ко всем методам этого класса, если к методу не добавлен другой более ограничительный атрибут. Я не уверен, почему вы все еще получаете 401. Возможно, попробуйте установить модуль в другой среде. 23.08.2018
  • извините, оказалось, что в спешке, чтобы заставить это работать, я поместил AllowAnonymous на неправильный контроллер... Теперь я получаю 200, когда я добавил его в правильный контроллер. Я попытался раскомментировать как поддерживаемые модули, так и авторизацию модуля dnn по одному, и он снова выдает 404 независимо от того, какой из них был раскомментирован (это раскомментировал их по одному) 23.08.2018
  • Я нашел проблему... Я перепутал два параметра в своем коде javascript, спасибо за вашу помощь. 23.08.2018
  • @JohnKane - Круто! Рад, что ты разобрался. 23.08.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..