属性路由在 asp.net core 3.0 中无法正常工作
Posted
技术标签:
【中文标题】属性路由在 asp.net core 3.0 中无法正常工作【英文标题】:Attribute routing is not working properly in 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 => 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>
如果我在这里遗漏了什么,或者我在配置中间件以进行路由时做错了什么,请您帮帮我。
提前致谢。
【问题讨论】:
【参考方案1】:在 asp.net core 3.0 中默认会修剪控制器动作名称的异步后缀。
参考https://***.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>
【讨论】:
以上是关于属性路由在 asp.net core 3.0 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?
自动挡换手动挡:在 ASP.NET Core 3.0 Middleware 中手动执行 Controller Action