[ASP.NET Core] 筆記-在Controller非同步方法的方法名稱與路由

WebApi上非同步Api的方法名稱

偶然看到的討論,順便記錄起來


在寫Code的習慣上,非同步的方法名稱都會冠上後綴Async

ex: CreateAsync

若遇到了前端要呼叫後端的Api時,就需要使用完整的鏈結

ex: Home/GetMemberAsync

 

在.NET Core 3.0後,路由允許鏈結不冠上Async後綴,下面用例子說明:

1.若有個Controoler,裡面包含了一個Async方法,當發出兩種reqeust時的情況

  • Home/GetAllAsync => 404
  • Home/GetAll => Pass
    public class HomeController : Controller
    {
        public Task<ApiResult<object>> GetAllAsync()
        {
            return Task.FromResult(new ApiResult<object>());
        }
    }

2.若不想要這樣的約定,可以從Startup上設定,指定 SuppressAsyncSuffixInActionNames 為 false,上面例子的結果就會變成

  • Home/GetAllAsync => Pass
  • Home/GetAll => 404
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews(options =>
            {
                options.SuppressAsyncSuffixInActionNames = false;
            });
}

3.順帶一提,若在View上透過UrlHelper產生的連結,會是冠上後綴Async的Url,代表點下去會直接404