为了账号安全,请及时绑定邮箱和手机立即绑定

为 HttpRequestMessage.Properties 定义的字典键

为 HttpRequestMessage.Properties 定义的字典键

C#
PIPIONE 2023-09-16 17:28:18
我到处搜索过,但没有提到这个键的定义位置,或者类似的键HTTP_X_FORWARDED_FOR,例如REMOTE_ADDR等。遗憾的是,这些都没有解决我当前的问题——所有这些字典键从哪里来?它们的规范在哪里,以便人们通过查看它们所包含的内容来知道它们的存在并学习使用它们?编辑:我正在使用 .NET Framework 4.6.0,其中 System.Net.Http 的版本是 4.0.0.0。为了获取客户端 IP,我正在执行以下操作:public string GetSomeIp(HttpRequestMessage request){    HttpContextWrapper context =        request.Properties["MS_HttpContext"] as HttpContextWrapper;    return (context == null) ?        string.Empty : (context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]       ?? context.Request.ServerVariables["REMOTE_ADDR"]).Split(',')[0].Trim();}我想找到文档,它MS_HttpContext详细解释了 、 、 以及它们的定义位置REMOTE_ADDR,HTTP_X_FORWADED_FOR这样我就可以看到所有其他键以及它们的实现/正确用法的更多详细信息。我知道以下服务器变量,但此处没有提及此处使用的键。(除了REMOTE_ADDR)
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

另一种情况与 CORS 和测试有关。您可以克隆此存储库并在您要查找详细信息时深入搜索“MS_HttpContext”事件。但是,我不确定它的文档。

定义此键的位置,或类似的键,例如 HTTP_X_FORWARDED_FOR、REMOTE_ADDR 等。

所有这些字典键从哪里来?

这些请求的属性(又名服务器变量)是根据客户端发送的相应标头创建的(几乎是重复的)(适用于 HttpContext - ASP.NET WebForms/MVC)

顺便说一句,ASP.NET Core 的 HttpRequest 中不再有此类属性(仅限标头)。


如果您需要在 ApiController 内检索它,可能会更容易(不要忘记所需的空引用检查和自托管 WebAPI 解决方案):

public class YourApiController : ApiController {

    public HttpResponseMessage YourActionName() {

        var request = new HttpContextWrapper(CurrentContext).Request;

        ...

    }

}



public class YourAuditHandler : DelegatingHandler {

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {

        string ipAddress = HttpContext.Current != null ? HttpContext.Current.Request.UserHostAddress : "0.0.0.0";

        ...

    }

}


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 40 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信