0

是否可以通过 web.config 或类似的方式仅允许\禁止访问 ASP.NET MVC2 应用程序上的某些控制器或操作?我的意思不是通过 Authorize 属性,我的意思是完全禁止访问某些控制器?

我正在查看的场景是,客户端有一个 ASP.NET MVC2 站点,其中一个控制器具有公共操作(并且没有 Authorize 属性)和一堆其他控制器,它们具有 Authorize 属性。该站点使用表单身份验证,因此如果用户尝试访问其中一个非公共控制器,则会提示他们登录。

客户希望更进一步,在他们的 Intranet 上允许访问非公共控制器,而在 Internet 上只能访问公共控制器。

有什么方法可以做到这一点,最好不要对实际应用程序进行代码更改?我猜可能有 2 个具有不同设置的 IIS 站点\应用程序?我需要 2 个具有不同 web.config 的应用程序文件夹副本还是有其他选项?

4

1 回答 1

2

如果代码更改不是首选,我认为请求过滤将允许您阻止应用程序的某些 url,从而有效地使那些您不想公开的控制器操作无法访问。

以下是如何使用的示例: http ://www.iis.net/configreference/system.webserver/security/requestfiltering/denyurlsequences

基本上,您必须将以下内容添加到您的 web.config:

<system.webServer>
    <security>
        <requestFiltering>
            <denyUrlSequences>
                <add sequence="controller/action" />
                <add sequence="controller/otheraction" />
            </denyUrlSequences>
        </requestFiltering>
    </security>
</system.webServer>

使用这种方法,您需要在文件系统中拥有两个网站副本和两个 IIS 网站。不是最优的,但满足不改变代码的条件。

于 2013-06-14T03:21:05.317 回答