ASP.NET MVC应用程序:可能只公开一些控制器操作

时间:2013-06-14 03:02:50

标签: asp.net asp.net-mvc

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

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

客户希望更进一步,并在其内部网上允许访问非公共控制器,而在互联网上只能访问公共控制器。

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

1 个答案:

答案 0 :(得分:2)

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

以下是如何使用的示例: 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网站中拥有两个网站副本。不是最优的,但满足无代码更改的条件。