gpt4 book ai didi

asp.net-mvc - ASP.NET MVC RequireHttps 仅在生产中

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:35 25 4
gpt4 key购买 nike

我想使用 RequireHttpsAttribute以防止将不安全的 HTTP 请求发送到操作方法。

C#

[RequireHttps] //apply to all actions in controller
public class SomeController
{
[RequireHttps] //apply to this action only
public ActionResult SomeAction()
{
...
}
}

VB

<RequireHttps()> _
Public Class SomeController

<RequireHttps()> _
Public Function SomeAction() As ActionResult
...
End Function

End Class

很遗憾,ASP.NET 开发服务器不支持 HTTPS。

如何让我的 ASP.NET MVC 应用程序在发布到生产环境时使用 RequireHttps,但在 ASP.NET 开发服务器上的开发工作站上运行时却不使用?

最佳答案

如果您在开发工作站上运行发布构建,这将无济于事,但条件编译可以完成这项工作...

#if !DEBUG
[RequireHttps] //apply to all actions in controller
#endif
public class SomeController
{
//... or ...
#if !DEBUG
[RequireHttps] //apply to this action only
#endif
public ActionResult SomeAction()
{
}

}

更新

在 Visual Basic 中,属性在技术上与它们所应用的定义属于同一行。你不能把条件编译语句放在一行中,所以你不得不写两次函数声明——一次有属性,一次没有。不过,如果您不介意丑陋的话,它确实有效。

#If Not Debug Then
<RequireHttps()> _
Function SomeAction() As ActionResult
#Else
Function SomeAction() As ActionResult
#End If
...
End Function

更新2

很多人提到从 RequireHttpsAttribute 派生,但没有提供示例,所以这里为您提供一个。我认为这种方法比条件编译方法更简洁,我更喜欢你的立场。

免责声明:我没有测试过这段代码,哪怕是一点点,而且我的 VB 相当生疏。我所知道的是它编译。我是根据spot、queen3、Lance Fisher的建议写的。如果它不起作用,它至少应该传达总体思路,并给你一个起点。

Public Class RemoteRequireHttpsAttribute
Inherits System.Web.Mvc.RequireHttpsAttribute

Public Overrides Sub OnAuthorization(ByVal filterContext As _
System.Web.Mvc.AuthorizationContext)
If IsNothing(filterContext) Then
Throw New ArgumentNullException("filterContext")
End If

If Not IsNothing(filterContext.HttpContext) AndAlso _
filterContext.HttpContext.Request.IsLocal Then
Return
End If

MyBase.OnAuthorization(filterContext)
End Sub

End Class

基本上,如果当前请求是本地的(也就是说,您正在通过本地主机访问站点),新属性就会退出而不是运行默认的 SSL 授权代码。你可以像这样使用它:

<RemoteRequireHttps()> _
Public Class SomeController

<RemoteRequireHttps()> _
Public Function SomeAction() As ActionResult
...
End Function

End Class

干净多了!前提是我未经测试的代码确实有效。

关于asp.net-mvc - ASP.NET MVC RequireHttps 仅在生产中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1639707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com