Маршрутизация атрибутов не работает должным образом в asp. net core 3.0 - PullRequest
1 голос
/ 16 января 2020

Я пытался перенести свое приложение с asp. net ядро ​​2.1 на 3.0, которое использует маршрутизацию атрибутов

Методы ConfigureServices и Configure моего загрузочного файла:

public void ConfigureServices(IServiceCollection services)
{
    services.ConfigureOptions(typeof(ABCClass));
    services.AddTransient<ITagHelperComponent, XYZTagHelperComponent>();            
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
       app.UseDeveloperExceptionPage();
    }
    app.UseStaticFiles();
    app.UseMvcWithDefaultRoute();
}

I заменили services.AddMvc(); на services.AddMvc(options => options.EnableEndpointRouting = false);, чтобы отключить маршрутизацию конечной точки

Мой метод действия:

[Route("")]
[Route("Machines")]
public async Task<ViewResult> GetMachinesAsync()
{
    return View("MachineView");
}

Первый раз мое приложение загружается с MachineView, но когда я пытаюсь вызвать тот же метод действия на это дает мне ошибку 404 (страница не может быть найдена)

вызов действия из .cs html file:

<li class="nav-item">
    <a class="nav-link"
       href="@Url.Action("GetMachinesAsync", "Machine")">
       Machines 
    </a>
</li>

Можете ли вы помочь мне, если я что-то здесь упустил , или я что-то не так сделал при настройке промежуточного программного обеспечения для маршрутизации.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 января 2020

Вам не требуются суффиксы async для методов действия. Поэтому, если вы хотите сослаться на GetMachinesAsync, вам нужно использовать GetMachines, вот так.

<li class="nav-item">
    <a class="nav-link"
       href="@Url.Action("GetMachines", "Machine")">
       Machines 
    </a>
</li>
1 голос
/ 16 января 2020

Asyn c Суффикс для имен действий контроллера будет обрезан по умолчанию в asp. net core 3.0.

См. { ссылка }

Solution1:

Заменить GetMachinesAsync на GetMachines в поле зрения.

<li class="nav-item">
 <a class="nav-link"
   href="@Url.Action("GetMachines", "Machine")">
   Machines 
</a>
</li>

Solution2:

Продолжать использовать GetMachinesAsync

<li class="nav-item">
<a class="nav-link"
   href="@Url.Action("GetMachinesAsync", "Machine")">
   Machines 
</a>
</li>

затем отключите это поведение при запуске

services.AddMvc(options =>
{
     options.EnableEndpointRouting = false;
     options.SuppressAsyncSuffixInActionNames = false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...