是否可以通过web.config或类似方式仅允许\禁止访问ASP.NET MVC2应用程序上的某些控制器或操作?我不是指通过Authorize属性,我的意思是完全不允许访问某些控制器?
我正在看的场景是客户端有一个ASP.NET MVC2站点,其中一个控制器具有公共操作(并且没有Authorize属性),还有一堆其他具有Authorize属性的控制器。该站点使用表单身份验证,因此如果用户尝试访问其中一个非公共控制器,则会提示他们登录。
客户希望更进一步,并在其内部网上允许访问非公共控制器,而在互联网上只能访问公共控制器。
有什么方法可以做到这一点,最好不对实际应用程序进行代码更改?我猜这可能是2个IIS网站\应用程序具有不同的设置?我是否需要使用不同web.config的2个应用程序文件夹副本,还是有其他选项?
答案 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网站中拥有两个网站副本。不是最优的,但满足无代码更改的条件。