【问题标题】:Want to route to base controller if specified controller is not found如果找不到指定的控制器,想要路由到基本控制器
【发布时间】:2018-06-18 11:28:55
【问题描述】:

我有一个 Base 控制器,它提供了一些操作的基本实现:

[Route("api/[controller]")]
public class BaseAppController : Controller
{...

我有几个由此派生的控制器,它们使用来自基本控制器的路由来调用。他们添加了各种功能。例如:

public class SomeController : BaseAppController
{
... more stuff ...
}

现在当请求转到

http://appurl/Some/MyAction

它显然使用了 MyAction,它位于 SomeController 或 BaseAppController 中。

我想要实现的是,如果我发送请求到:

http://appurl/NonExistent/MyAction

我希望它确定 NonExistentController 不存在并改为使用 BaseAppController。

欢迎任何指点。

【问题讨论】:

    标签: c# asp.net-core-mvc asp.net-core-webapi asp.net-core-routing


    【解决方案1】:

    您可以使用 FilterAttribute 将带有 404 Not Found 状态代码的响应重定向到不同的 url / 路由。

    创建过滤器后,在 FilterConfig.cs 中注册它

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new MyNotFoundAttribute());
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过 App_start 文件夹中的 Webapiconfig.cs 捕获 NonExistent 控制器或方法。

      将以下代码附加到 Webapiconfig.cs

      config.Routes.MapHttpRoute(
      name: "ResourceNotFound",
      routeTemplate: "{*uri}",
      defaults: new { controller = "BaseApp", uri = RouteParameter.Optional });
      

      这应该会捕获所有未找到的 api 请求并发送到 BaseAppContoller。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        相关资源
        最近更新 更多