【问题标题】:.net core web api controller and action selection.net core web api 控制器和动作选择
【发布时间】:2018-08-22 10:59:14
【问题描述】:

我需要根据以下内容生成适当的 404 错误:

  1. 如果请求的控制器不存在;
  2. 如果操作不存在;

我正在尝试在 .NET Core Web API 上迁移 web api,需要在 .net 框架中的 DefaultHttpControllerSelector 和 ApiControllerActionSelector 的 .net 核心中找到模拟。因为我有模块,它检查控制器和动作的存在。如果未找到控制器或操作,则生成自定义错误。 我该如何处理?

【问题讨论】:

  • 你能定义“合适”吗?尝试更具体地说明您要实现的目标。
  • @KirkLarkin ,帖子已编辑
  • docs.microsoft.com/en-us/aspnet/core/mvc/controllers/… 听起来您需要完全自定义路由。
  • 为什么你首先需要这个?如果没有匹配的控制器/动作,您将获得 404。这是内置的。

标签: .net-core asp.net-core-webapi


【解决方案1】:

控制器或动作不存在,默认返回404

如果您想自定义错误消息,您可以尝试Middleware 检查Response.StatusCode,然后根据您自己的逻辑自定义响应。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.Use(async (context, next) => {
            //handle request
            await next.Invoke();
            //handle response
            if (context.Response.StatusCode == StatusCodes.Status404NotFound)
            {
                //hanlde based on your logic
                await context.Response.WriteAsync("Something wrong");
            }
        });
  // Rest app.Use

【讨论】:

  • 我知道如果控制器或动作不存在,我会默认得到 404。我做了同样的方法,但我认为我可以处理 404 并抛出新异常(“控制器不存在”)并抛出新异常(“动作不存在”)
  • 您可以尝试实现IRouter 并覆盖RouteAsync 以验证控制器或操作是否存在。试试RouteBase
猜你喜欢
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2023-01-19
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多