
最近把项目从.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;
});