去除后缀_asp.net core 3会去除action name Async后缀

在将项目从.NET Core 2.2升级到3.1后,发现部分AJAX请求返回404错误。原因在于.NET Core 3.0及以上版本会自动移除Action名中的'Async'后缀,导致URL路由失败。解决方法包括修改Action名称,调整前端URL生成,或者在Startup配置中取消自动去除Async后缀的设置。对于大量Action,后者可能是更优选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

e3542d3020b246b329656ac2bdbf48a8.png

最近把项目从.net core 2.2升级到3.1,一路上磕磕绊绊,总算有惊无险。今儿在做测试的时候发现,有些ajax请求返回404错误!咦,这就奇怪了,明明之前好好的呀,怎么生成的url会路由不到呢。经过一番研究,发现是之前action name后面有个Async这个后缀的事儿。比如下面一段代码

public class ProductController : Controller
{
    public async Task<IActionResult> ListAsync()
    {
        return View();
    }
}

在3.0以前的版本,这个地址看起来是/product/ListAsync,如果你想生成路由地址,那么这个Async这个后缀的,也就是下面这样

<a asp-controller="Product" asp-action="ListAsync">List</a>

而在3.0之后,就不大一样了,它会总把你的Async后缀去除,地址变成了这样:/product/List,生成路由地址的时候,也不需要指定Async了

<a asp-controller="Product" asp-action="List">List</a>

如果还按3.0之前那样访问ListAsync,那么将无法路由到,也是为什么会返回404的原因。

这种情况怎么处理呢?

如果数量不多,可以改action name,把async后缀去了,或者您也可以改前端的url生成那块,但通常前端改动会比较多。

如果数量比较多,在startup加上一段配置,取消自动去除Async后缀的功能。

//AddMvc or AddControllersWithViews
services.AddMvc(options =>
{
   options.SuppressAsyncSuffixInActionNames = false; 
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值