Маршрутизация ASP.NET Core MVC на контроллер не работает после конфликта имен

Изначально у меня было 2 контроллера с одинаковым именем "AgreementController", но один находился в пространстве имен "API". Это вызвало ошибки при маршрутизации, используя настройки ниже:

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute(
                name: "ActionApi",
                template: "api/{controller}/{action}/{id?}");
        });

Чтобы решить эту проблему, я переименовал одно в пространстве имен "API" в "AgreementAPIController", но по какой-то причине я все еще не могу перенаправить на "/Agreement/Create/? CustomerId=1234", хотя контроллеры выглядят так:

public class AgreementController : Controller
{
    private readonly IMapper _mapper;


    public AgreementController(IMapper mapper)
    {
        _mapper = mapper;
    }

    [HttpGet]
    public IActionResult Create(int customerId)
    {
        return View(customerId);
    }        
}

а также

public class AgreementAPIController : Controller
{
    private readonly IMapper _mapper;

    public AgreementAPIController(IMapper mapper)
    {
        _mapper = mapper;
    }

    [HttpGet]
    public IActionResult Test()
    {
        return View();
    }

Если я также переименую "AgreementController" в "AgreementXController", то все будет нормально. Почему я должен переименовать оба контроллера? Где-то есть кеш, который хранит старые имена?

Это полный файл Startup.cs.

public class Startup
{
    public Startup(IConfiguration configuration, IHostingEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    public IConfiguration Configuration { get; }
    public IHostingEnvironment Environment { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IRFDbRepository, RFDbRepository>();
        var connection = Configuration.GetConnectionString("RFDbConnection");
        services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
        services.AddDbContext<RFDbContext>(options => options.UseSqlServer(connection));
        services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(connection));
        services.AddIdentity<User, UserRole>().AddDefaultTokenProviders();
        services.AddTransient<IUserStore<User>, UserStore>();
        services.AddTransient<IRoleStore<UserRole>, RoleStore>();
        services.AddAutoMapper();

        services.AddAuthorization(x =>
        {
            if (Configuration.GetValue<bool>("DisableAuthentication") && Environment.IsDevelopment())
            {
                x.DefaultPolicy = new AuthorizationPolicyBuilder()
                    .RequireAssertion(_ => true)
                    .Build();
            }
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(options =>
        {
            options.AllowAreas = true;
            options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
        });

        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.HttpOnly = true;
            options.LoginPath = "/Identity/Account/Login";
            options.LogoutPath = "/Identity/Account/Logout";
            options.ExpireTimeSpan = TimeSpan.FromMinutes(Configuration.GetValue<int>("AuthenticationCookie:ExpiryMinutes"));
            options.SlidingExpiration = Configuration.GetValue<bool>("AuthenticationCookie:SlidingExpiration");
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IRFDbRepository rFDbRepository)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        loggerFactory.AddFile(Configuration.GetValue<string>("Logging:LogFile"));
        app.UseStaticFiles();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute(
                name: "ActionApi",
                template: "api/{controller}/{action}/{id?}");
        });

        rFDbRepository.TestConnection();
    }
}

0 ответов

Другие вопросы по тегам