我实际上不确定这是否可以在VB.NET中使用,但我正在尝试扩展内置属性Request.IsSecureConnection
。
我在反向代理上使用SSL卸载,因此命中该节点的所有连接将始终为Request.IsSecureConnection
返回false。如果标题不存在,我自己的扩展会首先检查HTTP_X_FORWARDED_PROTO
然后回退到标准方法。
这是我到目前为止所拥有的,但是当我在这里设置一个断点时,这个块永远不会被击中。我确信这是一个很好的理由......只是不确定是什么原因?
Module Extensions
<Extension()>
Public Function IsSecureConnection(Request As HttpRequestBase) As Boolean
If HttpContext.Current.Request("HTTP_X_FORWARDED_PROTO") <> "" Then
Dim https As String = HttpContext.Current.Request("HTTP_X_FORWARDED_PROTO")
If https.ToLower = "on" Then
Return True
Else
Return False
End If
Else
Return Request.IsSecureConnection '<< Not sure here how I would reference the .net framework class without looping back into this function?
End If
End Function
End Module
修改
我想拦截这个属性而不是编写我自己的自定义方法的原因是因为我所依赖的库引用了这个属性而我无法覆盖它。
答案 0 :(得分:1)
MSDN说:
如果扩展方法具有相同的签名,则永远不会调用它 作为类型中定义的方法。
https://msdn.microsoft.com/en-GB/library/bb383977.aspx
所以我怀疑你使用扩展方法无法达到你想要的效果。