【问题标题】:Attribute routing is not working properly in asp.net core 3.0属性路由在 asp.net core 3.0 中无法正常工作
【发布时间】:2020-05-02 22:23:37
【问题描述】:

我试图将我的应用程序从 asp.net core 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();
}

我已将 services.AddMvc(); 替换为 services.AddMvc(options =&gt; options.EnableEndpointRouting = false); 以禁用端点路由

我的操作方法:

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

第一次使用 MachineView 加载我的应用程序,但是当我尝试对其调用相同的操作方法时出现 404 错误(找不到页面)

来自 .cshtml 文件的操作调用:

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

如果我在这里遗漏了什么,或者我在配置中间件以进行路由时做错了什么,请您帮帮我。

提前致谢。

【问题讨论】:

    标签: asp.net-core asp.net-core-2.1 asp.net-core-3.0 asp.net-core-routing


    【解决方案1】:

    在 asp.net core 3.0 中默认会修剪控制器动作名称的异步后缀。

    参考https://stackoverflow.com/a/59024733/10158551

    解决方案1:

    在视图中将GetMachinesAsync 替换为GetMachines

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

    解决方案2:

    继续使用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;
    });
    

    【讨论】:

      【解决方案2】:

      操作方法不需要async 后缀。所以如果你想引用GetMachinesAsync你需要使用GetMachines,像这样。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 2021-09-04
        • 1970-01-01
        相关资源
        最近更新 更多