允许一些路由并阻止所有其他ASP.NETMVC

时间:2018-03-21 15:38:17

标签: asp.net-mvc azure-web-sites

我在ASP.NET MVC中有一个应用程序,它有多个可能的路由,可能会变得更大,因为我们可以动态添加插件。我们正在谈论数百个不同的页面和控制器。我们修改/添加了我们需要的(主要是重新设计)。现在我们必须确保用户只能访问我们修改过的页面。知道我们购买的应用程序的人可以去我们不希望他看到的路线。

所以最后,我的问题是:

有没有办法拒绝除了我想要的路线之外的所有路线。

由于申请量很大。我不能/不想去单个控制器并添加重定向或数据注释。此外,我不想列出我拒绝的每个网址,因为如果我们稍后添加插件,那也会很疯狂并且无法工作。我有300个网址拒绝,20个允许.. 我在webconfig中想到这样的事情吗?

deny *
permit mycontroller/action1
permit mycontroller/action2

我还应该补充一点,这个应用程序不使用任何类型的身份验证/授权。我希望任何用户都能够使用该应用程序。

我们在Azure wep app中托管它,这是一个解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题,我就是这样的。

这一切都在应用程序的web.config中完成:

你首先要用这个

否定一切
 <authorization>
  <deny users="?" />
</authorization>
<authentication mode="None" />

然后,您可以将您想要的网址列入白名单:

  <location path="mycontroller/action1">
<system.web>
  <authorization>
    <allow users="?" />
  </authorization>
</system.web>

<location path="mycontroller/action2">
<system.web>
  <authorization>
    <allow users="?" />
  </authorization>
</system.web>

因此,每个URL dans都没有位置标记被认为无效,并会引发401异常。然后你可以从那里做你想做的事。

希望这有助于某人:)

答案 1 :(得分:-1)

使用控制器级别的[Authorize]属性,然后使用[AllowAnonymous]进行操作

[Authorize]
Public class mycontroller : Controller
{
  Public ActionResult action1 ()
  {
    Return View();
  }

  [AllowAnonymous]
  Public ActionResult action2 ()
  {
    Return View ();
  }
}