asp.net 核心 3.0 中的属性路由无法正常工作
Attribute routing is not working properly in asp.net core 3.0
我试图将我的应用程序从 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();
}
我已将 services.AddMvc();
替换为 services.AddMvc(options => 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 核心 3.0 中默认修剪。
参考
解决方案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;
});
操作方法不需要 async
后缀。所以如果你想引用 GetMachinesAsync
你需要使用 GetMachines
,像这样。
<li class="nav-item">
<a class="nav-link"
href="@Url.Action("GetMachines", "Machine")">
Machines
</a>
</li>
我试图将我的应用程序从 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();
}
我已将 services.AddMvc();
替换为 services.AddMvc(options => 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 核心 3.0 中默认修剪。
参考
解决方案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;
});
操作方法不需要 async
后缀。所以如果你想引用 GetMachinesAsync
你需要使用 GetMachines
,像这样。
<li class="nav-item">
<a class="nav-link"
href="@Url.Action("GetMachines", "Machine")">
Machines
</a>
</li>