【问题标题】:MVC3 Custom attribute to deny HTTP VerbsMVC3 自定义属性拒绝 HTTP 动词
【发布时间】:2018-04-23 17:59:50
【问题描述】:

在 Asp.net Web 应用程序中,我们可以使用 web.config 文件中的以下代码行来拒绝 HttpVerbs,但 MVC 使用动作控制器进行路由,使用 Authorize 属性进行授权。

所以我们想创建自定义属性来处理这个问题。

如何创建自定义属性以在所有操作方法上默认拒绝某些 HTTP 动词,并且只允许 HTTPGet 和 HTTPPost。

<deny verbs="*" users="*" /> 

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-3


    【解决方案1】:

    如果您想禁止所有动词 除了 GET 和 POST,您可以在 web.config 文件中执行以下操作。

    <configuration>
     <system.webServer>
      <security>
       <requestFiltering>
        <verbs allowUnlisted="false">
         <add verb="GET" allowed="true" />
         <add verb="POST" allowed="true" />
        </verbs>
       </requestFiltering>
      </security>
     </system.webServer>
    </configuration>
    

    示例代码及其他阅读here

    通过将它放在 web.config 中,您可以“短路” .NET 管道并允许 IIS 选择是否响应请求(这对您的应用程序更有效)。

    【讨论】:

    • 谢谢。给定的示例可以在 IIS 中配置,但我们必须在 MVC 应用程序中进行配置,因为我们无法控制服务器。
    • 您的 MVC 应用解决方案中有一个 web.config。您可以在此处进行更改
    • 是的,我们可以,但 MVC 使用动作控制器管道进行授权,因此被要求创建自定义属性来强制执行所有动作方法。
    • @Ask_SO - 我仍然不明白 MVC 路由和授权与 HTTP 动词有什么关系?此外,MVC已经HTTPGetHTTPPost...内置了属性。只需用这些来装饰你所有的动作方法。如果你想阻止任何不允许的动词,你真的应该在配置级别这样做。
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-11-02
    • 2023-03-10
    相关资源
    最近更新 更多