मैंने हर जगह खोज की है और कहीं भी यह उल्लेख नहीं किया गया है कि यह कुंजी कहां परिभाषित की गई है, या इसी तरह के जैसे HTTP_X_FORWARDED_FOR, REMOTE_ADDR आदि।

MSDN दस्तावेज़ उपयोगी कुछ भी उल्लेख नहीं करता है। केवल एक चीज जो मेरे लिए उपयोगी थी, वह थी कुछ स्टैकअतिप्रवाह प्रश्न (यह और यह< /a>), साथ में यह लघु ब्लॉग पोस्ट।

इनमें से कोई भी दुखद रूप से मेरे वर्तमान प्रश्न को संबोधित नहीं करता है - ये सभी शब्दकोश कुंजियाँ कहाँ से आती हैं? उनकी विशिष्टता कहां है, ताकि किसी को पता चले कि वे मौजूद हैं और उनके पास मौजूद सामग्री को देखकर उनका उपयोग करना सीखें?

संपादित करें: मैं .NET Framework 4.6.0 का उपयोग कर रहा हूं, जहां System.Net.Http का संस्करण 4.0.0.0 है। क्लाइंट आईपी प्राप्त करने के लिए, मैं निम्नलिखित कर रहा हूं:

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 को छोड़कर)

6
SpiritBob 22 अगस्त 2019, 13:30

1 उत्तर

सबसे बढ़िया उत्तर

मैं दस्तावेज़ीकरण ढूंढना चाहता हूं, जो बताता है कि MS_HttpContext क्या करता है/विस्तार से रखता है

System.Web.Http.* असेंबली https://referencesource.microsoft.com/ पर वर्णित नहीं हैं। .

हालांकि, इन सभी परियोजनाओं को अब गिटहब पर ओपन के रूप में होस्ट किया गया है? स्रोत https://github.com/aspnet/AspNetWebStack। अब तक, मुझे लगता है कि यह स्थिरांक/कुंजी नियमित रूप से उपयोग की जाती है जो System.Web -> HttpContext को System.Web.Http -> Request को असाइन करती है।

https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Http.WebHost/HttpRequestMessageExtensions.cs#L11-L44

अन्य घटनाएं CORS और टेस्ट से संबंधित हैं। आप इस रेपो को क्लोन कर सकते हैं और "MS_HttpContext" घटनाओं की गहराई से खोज कर सकते हैं, आप विवरण की तलाश में हैं। हालाँकि, मैं इसके दस्तावेज़ीकरण के बारे में निश्चित नहीं हूँ।

जहां इस कुंजी को परिभाषित किया गया है, या इसी तरह के जैसे HTTP_X_FORWARDED_FOR, REMOTE_ADDR आदि।

ये सभी शब्दकोश कुंजियाँ कहाँ से आती हैं?

इन अनुरोधों के गुण (उर्फ सर्वर वेरिएबल्स) क्लाइंट द्वारा यहां भेजे गए संबंधित हेडर से (लगभग डुप्लिकेट) बनाए गए हैं (एचटीपीकॉन्टेक्स्ट - एएसपी.नेट वेबफॉर्म/एमवीसी के लिए लागू):

https://referencesource.microsoft.com/#System.Web/HttpRequest.cs,dc76880a3cfd0009

https://referencesource.microsoft.com/#System.Web/HttpRequest.cs,639

वैसे, ASP.NET Core (केवल शीर्षलेख) के लिए HttpRequest में ऐसी कोई और विशेषता नहीं है।

यदि आपको क्लाइंट आईपी जानकारी प्राप्त करने की आवश्यकता है, तो उपरोक्त (आपके या सुझाए गए) लिंक से किसी भी दृष्टिकोण का उपयोग करें।

यदि आपको परिचित HttpContext इंस्टेंस (उदाहरण के लिए, ApiController के बाहर, उदाहरण के लिए, DelegatingHandler/aka मिडलवेयर) को पुनः प्राप्त करने की आवश्यकता है, तो यह (पहले ही उल्लेख किया जा चुका है)।

यदि आपको इसे एपीकंट्रोलर के अंदर पुनः प्राप्त करने की आवश्यकता है, तो यह और भी आसान हो सकता है (आवश्यक नल रेफरी चेक और स्वयं-होस्ट किए गए वेबएपीआई समाधानों के बारे में मत भूलना):

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";
        ...
    }
}
5
Community 20 जून 2020, 09:12