निर्धारित करें कि ASP.NET अनुप्रयोग स्थानीय रूप से चल रहा है या नहीं


79

मैं जानना चाहता हूं कि क्या यह निर्धारित करने का अनुशंसित तरीका है कि क्या एक एस्प एप्लीकेशन स्थानीय रूप से चल रहा है। फिलहाल मैं रिक्वेस्ट ऑब्जेक्ट का उपयोग करता हूं और सर्वर वैरिएबल पर लोकलहोस्ट या 127.0.0.1 के लिए एक स्ट्रिंग खोज करता हूं लेकिन इसकी कई सीमाएं हैं। सबसे बड़ी बात यह है कि अनुरोध वस्तु हमेशा उपलब्ध नहीं होती है जब मुझे इसकी आवश्यकता होती है।

जवाबों:


148

HttpRequest.IsLocal देखें

bool isLocal = HttpContext.Current.Request.IsLocal;

7
रिक्वेस्ट कहां से अशक्त है। यानी: Application_start?
मेह मैन

Application_Start के दौरान @mmtemporary कोई अनुरोध नहीं है, यह अनुरोध करने के लिए कोई कारण नहीं है कि Request.IsLocal या नहीं। यदि आप Global.asax पर इसका उपयोग करना चाहते हैं, तो Application_BeginRequest के अंदर इसका उपयोग करने पर विचार करें।
विनीसियस रोचा

1
@ViniciusRocha कुछ परिदृश्य में हम चाहते हैं कि जब जाँच शून्य हो।
मेह मैन

हमारे पास निर्भरता इंजेक्शन को हल करने के लिए यूनिटीकोर्नर है। हमारे पास एक IEnvironment निर्भरता है जो हमें बताती है कि यह स्थानीय है, मचान या उत्पादन। अनुरोध को शून्य होने पर हमें इसे हल करने की आवश्यकता है।
निक नेबलिंग ने

1
@NickNiebling शब्दों की एक उलझन लगता है ... मुझे लगता है कि यह सवाल यह निर्धारित करने के बारे में है कि क्या वर्तमान अनुरोध मशीन से आ रहा है जो वेब एप्लिकेशन को निष्पादित करता है - जो केवल तभी समझ में आता है यदि कोई वर्तमान अनुरोध है। ऐसा लगता है कि आप वास्तव में इसका मतलब है कि अगर यह उत्पादन, मचान या एक डेवलपर मशीन पर चल रहा है ? यह कैसे निर्धारित किया जाए, मुझे लगता है कि आप केवल यह तय कर सकते हैं कि उनके बीच अंतर कैसे किया जाए। विन्यास फाइल? मशीन का नाम पैटर्न? उस सिस्टम खाते का नाम जो ASP.Net इंजन को कार्यान्वित करता है?
Oskar Berggren


6

इसने मेरे लिए Application_Start के साथ काम किया

if (!HostingEnvironment.IsDevelopmentEnvironment)
{
      GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}

IsDevelopmentEnvironment कैसे सेट किया जाता है, इसके बारे में अधिक जानने के लिए, कृपया निम्नलिखित धागे को देखें।

ASP.NET में, HostingEnvironment.IsDevelopmentEnvironment का मान क्या निर्धारित करता है?


अगर कोई इसके लिए लॉक कर रहा है तो भी विपरीत है: HostingEnvironment.IsHosted
G43beli

4

MVC दृश्य / ASP पृष्ठ / कक्षा के पीछे कोड:

bool isLocal = HttpContext.Current.Request.IsLocal;

MVC कंट्रोलर में:

bool isLocal = Request.IsLocal;

1

Request.IsLocal 127.0.0.1 या :: 1 के लिए जाँच के समान है। : यह पोस्ट देखें http://forums.asp.net/p/1065813/4081335.aspx


2
हां, लेकिन एक मानक लाइब्रेरी कॉल का उपयोग करना कोड के इरादे को बेहतर बनाता है, आईएमओ। मैं पुस्तकालय का उपयोग करना पसंद करूंगा, न कि अपना कोड लिखने के लिए ऐसा सरल काम करूं।
सीन

मैं सहमत हूँ। मैं केवल यह बताना चाहता था कि चूंकि नामित उत्तर उसी कोड का हो सकता है जो पोस्टर का उपयोग कर रहा था, इसलिए उत्तर की सीमाएँ समान हो सकती हैं।
ZLA

1
वह लिंक सही नहीं है। यदि मैं अपने सर्वर को इसके IP पते, HttpContext.Current.Request.IsLocal के माध्यम से स्थानीय रूप से हिट करता हूं, तो सही रूप से सही है, लेकिन UserHostAddress वास्तविक IP पता है, न कि 127.0.0.1 (या :: 1)। .NET 4. में परीक्षण किया गया
mhenry1384

जैसा कि mhenry1384 बताते हैं .. IsLocalयह भी जब आप SAME मशीन से IIS साइट पर जाते हैं। ऐसा करना स्थानीय मशीन से आने पर डिफ़ॉल्ट रूप से YSOD के विस्तृत त्रुटि संदेशों को भी प्रदर्शित करता है।
पिओटर कुला

1

यदि HttpContext.Current शून्य उपयोग नहीं है

HttpContext.Current.Request.IsLocal

अन्यथा, उदाहरण के लिए App_Start में या HttpContext.Current उपलब्ध होने से पहले, आप परीक्षण कर सकते हैं

HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")

या अपने पीसी पर एक समर्पित डिस्क।

एक अन्य तरीका उत्पादन में एक निरंतर संकलन चर का उपयोग किया जा सकता है, उदाहरण के लिए Azure और visualstudio.com से यदि आप उनका उपयोग करते हैं।

यह गंदा है, लेकिन यह काम करता है।


1

इस सूत्र में अन्य उत्तर के लिए @ मेह की टिप्पणी के जवाब में, जिन्होंने पूछा:

रिक्वेस्ट कहां से अशक्त है। यानी: Application_start?

यदि आप सुनिश्चित हैं कि आपके उत्पादन और परीक्षण या आपकी वेबसाइट के "होमोलॉग" संस्करण सभी को आपकी वेबसाइट के रिलीज़ संस्करण के साथ तैनात किया जाएगा, जबकि आपका स्थानीय वातावरण "डीबग" मोड में बनाया और विकसित किया जाएगा, तो आप #if DEBUGसिंटैक्स का उपयोग कर सकते हैं। कोड लिखें जो केवल स्थानीय रूप से चलाया जाना चाहिए, जबकि इस ब्लॉक के बाहर, या एक मिलान के अंदर भी#else ब्लॉक के , आप कुछ अन्य कोड लिख सकते हैं, जिसे आप केवल तभी चलाना चाहते हैं जब स्थानीय रूप से नहीं (जैसे: दूरस्थ रूप से)।

यहाँ एक छोटा सा नमूना है कि कैसे मैंने इस समस्या को एक विशेष परियोजना में हल किया है जिस पर मैं काम कर रहा हूँ:

#if DEBUG
    // Code here will only be run locally.
#else
    // Code here will only be run "remotely".

0

अनुरोध ASP.NET वातावरण में हमेशा उपलब्ध नहीं होता है?

HttpContext और इसके गुण अनुरोध / रिस्पॉन्स को सर्वर पेज को प्रोसेस करते ही शुरू कर दिया जाता है। तो किसी भी स्थान पर आप अपने पेज जीवन चक्र में सी # कोड निष्पादित कर सकते हैं आपको अनुरोध यूआरएल की जांच करने में सक्षम होना चाहिए।


मुझे महसूस नहीं हुआ कि मैं अनुरोध ऑब्जेक्ट तक पहुंचने के लिए HttpContext क्लास का उपयोग कर सकता हूं।
सीन

जिज्ञासा से बाहर, अनुरोध वस्तु तक पहुँचने की अन्य कौन सी विधि उपलब्ध है? धन्यवाद :)
रोमन रॉयटर

6
हां, अनुरोध और HttpContext ऑब्जेक्ट्स ASP.NET एप्लिकेशन में हमेशा उपलब्ध नहीं होते हैं। उदाहरण के लिए Application_Startकोई HTTPContext के साथ निष्पादित किया जाता है।
मक्सीम वी।

1
@ रामन। Application_Startहो सकता है कि नौकरियां हमेशा पृष्ठभूमि पर चल रही हों। साथ ही सवाल का पेज रिक्वेस्ट से कोई लेना-देना नहीं है।
मक्सीम वी।

1
^ तो आप किस पर भरोसा करते हैं?
eaglei22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.