如果找不到指定的控制器,则要路由到基本控制器

时间:2018-01-09 12:14:17

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

我有一个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。

欢迎任何指示。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

将以下代码附加到Webapiconfig.cs

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

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