Я пытаюсь реализовать папки Feature в веб-приложении Core 2.0 с помощью пакета OdeToCode.AddFeatureFolders.
Снимки экрана и фрагменты кода приведены ниже:
Ниже приведены 2 класса, которые я использовал для реализации функциональных папок:
namespace FeatureWebApp.Infrastructure.FeatureFolders
{
public class FeatureViewLocationExpander : IViewLocationExpander
{
public void PopulateValues(ViewLocationExpanderContext context)
{
}
public IEnumerable<string> ExpandViewLocations(
ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (viewLocations == null)
{
throw new ArgumentNullException(nameof(viewLocations));
}
// {0} - Action Name
// {1} - Controller Name
// {2} - Area name
//Features
yield return "/Features/{1}/{0}.cshtml";
yield return "/Features/{2}/{0}.cshtml";
yield return "/Features/{1}/{2}/{0}.cshtml";
yield return "/Features/{1}/Views/{0}.cshtml";
//Feature Areas
yield return "/Features/{2}/{1}/{0}.cshtml";
yield return "/Features/{2}/{1}/Views/{0}.cshtml";
yield return "/Features/{2}/Shared/{0}.cshtml";
//Shared
yield return "/Features/Shared/{0}.cshtml";
}
}
}
namespace FeatureWebApp.Infrastructure.FeatureFolders
{
public static class ServiceCollectionExtensions
{
public static IMvcBuilder AddFeatureFolders(this IMvcBuilder services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddRazorOptions(o =>
{
o.ViewLocationExpanders.Add(new FeatureViewLocationExpander());
});
return services;
}
}
}
Запуск .cs: -
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddFeatureFolders();
}
Проблема здесь в том, что если я не пишу [Route ("CreditCardAPI")] в контроллере creditcardapi, я не могу вызывать методы CreditCardAPI напрямую, используя "http: localhost: 00000 / CreditCardAPI". Это показывает мне ошибку
"Веб-страница не найдена для веб-адреса: http://localhost:61452/CreditCardAPI"
Я уже написал [Area ("CreditCards")] над контроллером CreditCardAPI, как показано на рисунке выше. Где, как и в домашнем контроллере, я не объявил ни области, ни какого-либо маршрута, но могу вызывать методы домашнего контроллера (метод индекса по умолчанию) напрямую, без определения области муравья или маршрута.
Также, если я использую структуру вложенных папок, например -> Функции -> TroubleTickets -> Список-> Контроллер, представление, модель, относящуюся к списку, как показано на изображении выше, как я могу в этом случае вызвать методы контроллера CreditCardAPI?
Есть предложения или идеи? Какие-либо шаги, которые я здесь пропускаю?