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

ASP.NET MVC应用程序:可能仅公开某些控制器操作,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,是否可以通过web.config或类似工具仅允许\不允许访问ASP.NET MVC2应用程序上的某些控制器或操作?我不是说通过Authorize属性,我是说完全不允许访问某些控制器 我所看到的场景是,一个客户端有一个ASP.NET MVC2站点,其中一个控制器具有公共操作(并且没有授权属性),另外一组控制器上具有授权属性。该站点使用表单身份验证,因此如果用户尝试访问其中一个非公共控制器,系统会提示他们登录 客户希望更进一步,在其内部网上允许访问非公共控制器,而在internet上只能访问公共控制

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

我所看到的场景是,一个客户端有一个ASP.NET MVC2站点,其中一个控制器具有公共操作(并且没有授权属性),另外一组控制器上具有授权属性。该站点使用表单身份验证,因此如果用户尝试访问其中一个非公共控制器,系统会提示他们登录

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


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

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

以下是如何使用的示例:

基本上,您必须在web.config中添加以下内容:

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


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

您可以为无代码更改解决方案创建自己的自定义Authorization atribute+1。尽管我认为自定义的
AuthorizeAttribute
将是最好的解决方案。@SimonWhitehead完全同意你的看法。