ASP. NET Основные области 3.1 возвращают 404 для некоторых методов, но не для индекса. - PullRequest
0 голосов
/ 28 марта 2020

У меня есть следующее простое решение с одной Области с именем Test:

The solution

В моем файле Startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
            .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "test",
                pattern: "Test/{controller=Map}/{action=Index}/{id?}");

            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

И в MapController.cs:

[Area("Test")]
[Route("test/[controller]")]
public class MapController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [Route("[action]")]
    public IActionResult LoadNearbySitesAsync()
    {
        return Ok("data");
    }
}

Когда я пытаюсь достичь https://localhost: 44319 / Test / Map / Index , появляется страница Index. Когда я пытаюсь достичь https://localhost: 44319 / Test / Map / LoadNearbySitesAsyn c, я получаю исключение HTTP 404:

enter image description here

Я также получаю исключение HTTP 404 при попытке доступа к методу LoadNearbySitesAsync с помощью функции jQuery $.get.

Раньше я использовал ASP. NET Core 2.2 и это работало нормально. Теперь, когда я переключился на ASP. NET Core 3.1 и новые функции Endpoints, я не могу заставить это работать.

Я пробовал разные комбинации атрибутов [Area] и [Route], я даже добавил атрибут [Route("[action]")] в метод LoadNearbySitesAsync, пока ничего не получалось.

Есть идеи, что мне здесь не хватает?

1 Ответ

2 голосов
/ 28 марта 2020
  1. Удалить [Route("[action]")] из действия LoadNearbySitesAsync и удалить [Route("Test/[controller]")] из контроллера
  2. Изменить MapControllerRoute на MapAreaControllerRoute
app.UseEndpoints(endpoints => {
        endpoints.MapControllers();
        endpoints.MapAreaControllerRoute(
            "Test",
            "Test",
            "Test/{controller=Map}/{action=Index}/{id?}");

        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");  
});
измените название действия с LoadNearbySitesAsync на LoadNearbySites или позвоните по этому адресу https://localhost:44319/Test/Map/LoadNearbySites

, чтобы получить дополнительную информацию, вы можете проверить эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...