如何防止用户访问某些内部路由?

Dav*_*Dev 3 asp.net-mvc asp.net-mvc-routing

我有一个有很多路线的网站.

一些路线,例如/sector-overview我希望用户看到的特定页面.

其他路线,例如/sectoroverview,最终呈现包括在主页上的部分的动作.

第二条路径仅仅是应用程序的内部路径,但如果用户在其地址栏中输入该路径(这是一个容易犯的错误),系统会将其视为有效请求并返回HTML部分.

可以将第二条路线重命名为类似的东西/internal-sectoroverview,但这并不能解决问题,只是隐藏它.

如果用户键入此请求,是否有任何方法可以阻止处理请求?处理这个问题的最佳方法是什么?

goe*_*ing 8

您可以使用路径约束来阻止路径.但是,在你的情况下,我会用[ChildActionOnly]这样装饰你的内部动作:

[ChildActionOnly]
public ActionResult Overview()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

通过执行此操作,仅在使用@Html.Action或时才会呈现操作@Html.RenderAction.如果您尝试通过浏览器访问它,则会收到错误消息.

UPDATE

要返回404而不是错误,您可以覆盖OnException控制器上的方法并在那里处理它.像这样的东西:

protected override void OnException(ExceptionContext filterContext)
{
    filterContext.ExceptionHandled = true;
    //check if filterContext.Exception was thrown by child action only (maybe by text)
    filterContext.Result = new HttpStatusCodeResult(404);
}
Run Code Online (Sandbox Code Playgroud)