ASP.NET की छिपी विशेषताएं [बंद]


292

यह प्रश्न मौजूद है क्योंकि इसका ऐतिहासिक महत्व है, लेकिन इसे इस साइट के लिए एक अच्छा, विषय-विषयक प्रश्न नहीं माना जाता है, इसलिए कृपया इसे सबूत के रूप में उपयोग न करें कि आप यहां इसी तरह के प्रश्न पूछ सकते हैं।

अधिक जानकारी: https://stackoverflow.com/faq


हमेशा ऐसी विशेषताएं होती हैं जो फ्रिंज परिदृश्यों में उपयोगी होंगी, लेकिन उसी कारण से अधिकांश लोग उन्हें नहीं जानते हैं। मैं उन विशेषताओं के लिए पूछ रहा हूं जो आमतौर पर पाठ्य पुस्तकों द्वारा नहीं सिखाई जाती हैं।

आप क्या जानते हैं?


अच्छा सवाल है, काश मैं कई बार वोट कर सकता!
गैविन मिलर

1
माना। मुझे इस तरह से धागे पसंद हैं। ढांचे के लिए इतनी गहराई है, कि आप कभी-कभी उन चीजों पर चकित होते हैं जिन्हें आप कभी नहीं जानते थे।
डीन

मैं इस धागे में प्रतिक्रियाओं से बहुत सारे नए नए ट्रिक्स सीख रहा हूँ - धन्यवाद! :)
मैक्सिम ज़स्लावस्की

16
"हिडन फीचर्स ऑफ़ .." के बजाय इन चीजों को "लिटिल नॉन फीचर्स ऑफ .." नाम नहीं दिया जाना चाहिए क्योंकि ज्यादातर हर उत्तर MSDN या अन्य जगहों पर अच्छी तरह से प्रलेखित है, बस आमतौर पर ज्ञात या उपयोग नहीं किया जाता है।
जॉन के

Meta.stackexchange.com/questions/56669/… , meta.stackexchange.com/questions/57226/… , और उपयुक्तता और समापन पर चर्चा के लिए संबंधित मेटा पोस्ट देखें ।

जवाबों:


335

परीक्षण करते समय, आपके पास एसएमटीपी सर्वर के बजाय आपके कंप्यूटर पर एक फ़ोल्डर में भेजे गए ईमेल हो सकते हैं। इसे अपने web.config में डालें:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
        </smtp>
    </mailSettings>
</system.net>

6
वास्तव में? मैं डम्बस्टर की तरह एक नकली SMTP सर्वर स्थापित करने वाला था। मैंने मणि छिपा ली।
एडुआर्डो मोल्टेनई

2
क्या किसी को पता है कि क्या आप निर्देशिका स्थान के लिए UNC शेयर निर्दिष्ट कर सकते हैं?
मार्क शेरेट्टा

32
बेहतर अभी तक, अपने देव बॉक्स machine.config पर डाल दिया, ताकि आप बनाने के लिए हर app पर web.config को बदलने की जरूरत नहीं है।
मैक्स टोरो

क्या आप इसे सेट कर सकते हैं ताकि यह केवल स्थानीय होस्ट पर ही हो। इस तरह आपको इसे हर बार बदलना नहीं पड़ता है?
चोबो 2

उसके लिए कोई सेटिंग नहीं है। आप अन्य तरीकों (वेब तैनाती परियोजनाओं, कार्य बिल्ड, आदि) का उपयोग कर config मतभेद का प्रबंधन करना होगा
जॉन शीहान

210

यदि आप एक ऐप्लीकेशन डायरेक्टरी के मूल में app_offline.htm नाम की फाइल रखते हैं , तो ASP.NET 2.0+ एप्लिकेशन को बंद कर देगा और उस एप्लिकेशन के लिए आने वाले किसी भी नए अनुरोध को सामान्य प्रोसेस करना बंद कर देगा, केवल app_offline.htm की सामग्री दिखाएगा। सभी नए अनुरोधों के लिए फ़ाइल ।

अपने "साइट अस्थायी रूप से अनुपलब्ध" नोटिस को प्रदर्शित करने का सबसे तेज़ और सबसे आसान तरीका है, जबकि उत्पादन सर्वर में फिर से तैनाती (या रोलिंग) परिवर्तन।

इसके अलावा, जैसा कि मार्क्सीडैड द्वारा बताया गया है , सुनिश्चित करें कि आपके पास फ़ाइल के भीतर कम से कम 512 बाइट्स हैं इसलिए IE6 इसे सही तरीके से प्रस्तुत करेगा।


10
IE के "मैत्रीपूर्ण" संदेशों के लिए समाधान न भूलें: tinyurl.com/app-offline-friendly
Mark Cidade

1
आउच! MOSS 2007 के साथ इसका उपयोग करते समय सावधान रहें। यह केवल उन पृष्ठों के लिए काम करेगा जो पिछले IIS पुनरारंभ के बाद से एक्सेस किए गए हैं। इसलिए, यदि आप इस पेज को अपने wss वर्चुअल रूट में जोड़ते हैं, तो एक पेज खोलने की कोशिश करें, जो पहले एक्सेस नहीं किया गया था, तो आपको 404 मिलेगा।
मार्क

1
@Marc - स्कॉट गुथरी के इस टिप को समझें, अगर आप उदार महसूस कर रहे हैं, तो आप इस परिदृश्य से बचने में बहुत से SharePoint Devs की मदद करेंगे यदि आपने Gu के लेख पर टिप्पणी की है: weblogs.asp.net/scottgu/archive5/10/ 06 / 426755.aspx
ट्रॉय डेमनब्रून

साथ ही, यह ऐप डोमेन के एक रीसायकल को भी ट्रिगर करेगा और सभी अनुरोधों के समाप्त होने के बाद किसी भी खुले डेटाबेस कनेक्शन को बंद कर देगा।
बार्ट वर्कोइजेन

इसके लिए एक चेतावनी है: IIS एक HTTP स्थिति कोड 404 के साथ app_offline.htm सामग्री लौटाता है। एक खोज इंजन के साथ भटकना चाहिए और इस ऑफ़लाइन मोड में रहने के दौरान अपनी साइट को अनुक्रमित करने का प्रयास करना चाहिए, आप परिणामों की सराहना नहीं कर सकते। लेकिन यह मेरे निजी कॉर्पोरेट वेब ऐप के लिए बहुत अच्छा काम करता है!
लैरी सिल्वरमैन

119
throw new HttpException(404, "Article not found");

यह ASP.NET द्वारा पकड़ा जाएगा जो customErrors पेज को लौटा देगा। डे पोस्ट के हालिया .NET टिप में इस बारे में जानें


कुछ डेवलपर्स तर्क दे सकते हैं कि HttpContext.Response में अपवादों को फेंकने के बजाय मैन्युअल रूप से चीजों को लपेटना बेहतर है। जो कि .NET बुक्स में काफी महंगा ऑपरेशन है।
लूबोस हैस्को

क्या यह बुरा रूप नहीं है? आप 404 त्रुटि दिखा रहे हैं, जबकि आप एक त्रुटि / अपवाद प्रदर्शित करना चाहते हैं।
डॉनी थॉमस

1
एक मामला जो मैं सोच सकता हूं, अगर कोई दुर्भावनापूर्ण रूप से मापदंडों के साथ खिलवाड़ कर रहा है और कुछ अमान्य डाल रहा है, तो आप शायद एक सामान्य 404 को एक विशिष्ट त्रुटि नहीं चाहते हैं।
जॉन शीहान

3
विशुद्ध रूप से अपवित्र क्योंकि मुझे अब डे साइट की .NET टिप के बारे में पता है।
कोन

यह तभी काम करता है जब आप इसे httpModule या httpHandler में फेंक देते हैं
खालिद मुसईद

75

यहाँ सबसे अच्छा है। इसे तेजी से संकलन के लिए अपने web.config में जोड़ें। इस QFE के माध्यम से यह पोस्ट 3.5SP1 है ।

<compilation optimizeCompilations="true">

त्वरित सारांश: हम ASP.NET में एक नया ऑप्टिमाइजेशन स्विच शुरू कर रहे हैं जो कुछ परिदृश्यों में संकलन गति में सुधार कर सकता है। कुछ कैच हैं, इसलिए अधिक जानकारी के लिए पढ़ें। यह स्विच वर्तमान में 3.5SP1 के लिए QFE के रूप में उपलब्ध है, और वीएस 2010 का हिस्सा होगा।

ASP.NET संकलन प्रणाली एक बहुत ही रूढ़िवादी दृष्टिकोण लेती है जिसके कारण यह किसी भी पिछले काम को मिटा देता है जो किसी भी समय 'शीर्ष स्तर' फ़ाइल में परिवर्तन करता है। 'टॉप लेवल' फाइलों में बिन और App_Code के साथ-साथ Global.asax कुछ भी शामिल है। जबकि यह छोटे ऐप्स के लिए ठीक काम करता है, यह बहुत बड़ी ऐप्स के लिए लगभग अनुपयोगी हो जाता है। उदाहरण के लिए, एक ग्राहक ऐसे मामले में भाग रहा था, जहां 'बिन' असेंबली में कोई भी बदलाव करने के बाद पेज को रीफ्रेश करने में 10 मिनट का समय लग रहा था।

दर्द को कम करने के लिए, हमने एक 'ऑप्टिमाइज़्ड' संकलन मोड जोड़ा, जो रीकॉम्पिलेशन के लिए बहुत कम रूढ़िवादी दृष्टिकोण लेता है।

के माध्यम से यहाँ :


6
वीएस 2010 के साथ यह "डिफ़ॉल्ट रूप से" है या क्या मुझे अभी भी इसे आज़माना चाहिए?
M4N

73
  • HttpContext.Current आपको वर्तमान संदर्भ के अनुरोध / प्रतिक्रिया / आदि तक पहुंच प्रदान करेगा, भले ही आपके पास पृष्ठ के गुणों तक पहुंच न हो (जैसे, शिथिल-युग्मित सहायक वर्ग से)।

  • आप उपयोगकर्ता को किसी दूसरे को रिस्पॉन्स कॉल करके रीडायरेक्ट करने के बाद उसी पृष्ठ पर कोड निष्पादित करना जारी रख सकते हैं। रीडायरेक्ट ( यूआरएल , गलत )

  • आप की जरूरत नहीं है .ASPX फ़ाइलें अगर आप चाहते हैं एक संकलित पृष्ठ (या किसी भी IHttpHandler ) है। Web.config फ़ाइल में <httpHandlers>तत्व में वर्ग को इंगित करने के लिए पथ और HTTP विधियों को सेट करें ।

  • एक पृष्ठ वस्तु एक से प्राप्त किए जा सकें .aspx प्रोग्राम के रूप में फोन करके फ़ाइल PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, संदर्भ)


Response.Redirect (url, false) के बारे में - यही वह है जो मैंने काफी लंबे समय से आशा की थी .. मुझे नहीं पता कि मैं कैसे चूक गया लेकिन thanxxx
Subliminal Hash

1
क्या कोई समझा सकता है कि आप इसके साथ क्या करेंगे? मुझे पता है कि इसका कुछ मूल्य है, लेकिन मैं इसका पता नहीं लगा सकता ...
डीन

5
यदि आप उपयोगकर्ता को एक अलग पते पर पुनर्निर्देशित करना चाहते हैं, लेकिन फिर भी कुछ बैक-एंड प्रोसेसिंग करने के लिए है (उदाहरण के लिए, एक रिपोर्ट पीढ़ी अनुरोध करती है कि रिपोर्ट की पीढ़ी स्थिति पृष्ठ पर रीडायरेक्ट करती है जबकि यह पृष्ठभूमि में रिपोर्ट उत्पन्न करना जारी रखती है)
मार्क सिडेड

क्या कोई PageParser.GetCompiledPageInstance (..) के लिए एक उपयोगी स्थिति की व्याख्या कर सकता है? डॉक्स इसके लिए बुनियादी ढांचे के उपयोग के लिए कहता है - यह एक IHttpHandler प्रकार लौटाता है इसलिए मैं यह नहीं देखता कि यह व्यावहारिक रूप से कैसे उपयोग किया जा सकता है।
जॉन के

@jdk: मैंने पूर्व में * .aspx अनुरोधों के लिए डिफ़ॉल्ट हैंडलर को ओवरराइड करते समय इसका उपयोग किया है ताकि मैं इन-मेमोरी IHttpHandler ऑब्जेक्ट्स का उपयोग कर सकूं लेकिन भौतिक रूप से .aspx फ़ाइलों के लिए GetCompiledPageInstance () का उपयोग करें।
मार्क सिडेड

70

मशीन पर खुदरा मोड ।config स्तर:

<configuration>
  <system.web>
    <deployment retail="true"/>
  </system.web>
</configuration>

डिबग को गलत पर लागू करने के लिए web.config सेटिंग्स को ओवरराइड करता है, कस्टम त्रुटियों को चालू करता है और ट्रेसिंग को अक्षम करता है। प्रकाशन से पहले विशेषताओं को बदलने के लिए कोई और भूल नहीं है - बस उन सभी को विकास या परीक्षण वातावरण के लिए कॉन्फ़िगर करें और उत्पादन खुदरा सेटिंग को अपडेट करें।


1
मैं कभी-कभी प्रकाशन से पहले संकलन डिबग को गलत में बदलना भूल जाता हूं, जो प्रदर्शन को नकारात्मक रूप से प्रभावित करता है। और कोई समस्या नहीं!
रॉय टिंकर

59

सामग्री पृष्ठों में मास्टरपेज के लिए इंटेलीसेंस को सक्षम करना
मुझे यकीन है कि यह बहुत कम ज्ञात हैक है

अधिकांश समय आपको खोजक विधि का उपयोग करना होता है और जब आप उनका उपयोग करना चाहते हैं, तब सामग्री पृष्ठों से मास्टर पृष्ठ में नियंत्रण डालते हैं, MasterType निर्देश आपके द्वारा एक बार दृश्य स्टूडियो में मधुरता को सक्षम कर देगा

पृष्ठ में केवल एक और निर्देश जोड़ें

<%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %>

यदि आप वर्चुअल पथ का उपयोग नहीं करना चाहते हैं और तब के बजाय वर्ग नाम का उपयोग करें

<%@ MasterType TypeName="MyMainMasterPage" %>

पूरा लेख यहाँ प्राप्त करें


FindControl का उपयोग करना कभी-कभी व्यस्त हो सकता है, इस महान टिप के लिए धन्यवाद!
अलेक्जेंड्रे ब्रिसेबोइस

4
इसके प्रयोग से अप्रत्याशित व्यवहार हो सकता है। देखें stackoverflow.com/questions/1998931/...
citronas

व्यक्तिगत रूप से मुझे लगता है कि फीचर को लोगों के लिए अज्ञात छोड़ देना चाहिए, यह पेज को मास्टरपेज में जोड़े देता है। यदि आप मास्टरपृष्ठ के गुणों / विधियों का उपयोग करते हुए समाप्त हो जाते हैं और फिर आपके द्वारा समाप्त किए गए मास्टरपृष्ठ को रखरखाव दुःस्वप्न में बदल देते हैं।
फिल डिस

@Phil: कभी-कभी इसकी आवश्यकता होती है और एक मास्टरपेज पर एक स्टेटिक रूप से टाइप की जाने वाली सुविधा FindControl दृष्टिकोण से बहुत बेहतर होती है। कम से कम आपको संकलक संदेश मिलता है और इसे जल्दी से ठीक कर सकते हैं।
Durden81

58

HttpContext.Items एक अनुरोध-स्तरीय कैशिंग टूल के रूप में


2
यह मेरी बात के रूप में अच्छी तरह से होने जा रहा था, मैं अनुरोधित स्तर की जानकारी को पास / प्राप्त करने के लिए नेस्टेड नियंत्रकों में इसका उपयोग करता हूं। Ii आंशिक दृष्टिकोणों के आधार पर, अपग्रेड करने के लिए js फ़ाइलों की सूची को स्टोर करने के लिए MVC में इसका उपयोग करता है।
ट्रैकर

1
मैं इसका उपयोग तब करता हूं जब मैं url से प्राप्त मापदंडों को अपने पृष्ठों पर पारित करने के लिए asp.net रूटिंग का उपयोग करता हूं। (MVC के साथ नहीं) url पुनर्लेखन के लिए महान और काफी लचीला है।
अलेक्जेंड्रे ब्रिसेबोइस

हम्म्म्म, कहीं सोचा जहाँ मैं सत्र के बजाय यह इस्तेमाल कर सकता था - टा!
माइक किंग्सकोट

52

मेरे सिर में दो चीजें हैं:

1) आप कोड से ट्रेस को चालू और बंद कर सकते हैं:

#ifdef DEBUG 
   if (Context.Request.QueryString["DoTrace"] == "true")
                {
                    Trace.IsEnabled = true;
                    Trace.Write("Application:TraceStarted");
                }
#endif

2) आप केवल एक साझा "कोड-पीछे" फ़ाइल का उपयोग करके कई .aspx पृष्ठ बना सकते हैं।

एक वर्ग .cs फ़ाइल बनाएँ:

public class Class1:System.Web.UI.Page
    {
        public TextBox tbLogin;

        protected void Page_Load(object sender, EventArgs e)
        {

          if (tbLogin!=null)
            tbLogin.Text = "Hello World";
        }
    }

और तब आपके पास .aspx पृष्ठों की संख्या हो सकती है (आपके द्वारा .designer.cs को हटाने के बाद और .cs कोड-पीछे जो वीएस उत्पन्न होता है):

  <%@ Page Language="C#"  AutoEventWireup="true"  Inherits="Namespace.Class1" %>
     <form id="form1" runat="server">
     <div>
     <asp:TextBox  ID="tbLogin" runat="server"></asp: TextBox  >
     </div>
     </form>

आपके पास ASPX में नियंत्रण हो सकता है जो Class1 में दिखाई नहीं देता है, और इसके विपरीत, लेकिन आपको नल के लिए अपने नियंत्रणों की जांच करने के लिए फिर से तैयार करना होगा।


मैंने इसे वोट दिया होगा, लेकिन वोट से भाग गया। मैं कोशिश कर रहा हूं और मुझे याद है कि इसे वोट करने के लिए वापस आऊंगा। मुझे नहीं पता था कि कई पृष्ठों के लिए एक ही कोड बिहाइंड फ़ाइल हो सकती है। यकीन नहीं होता, यह कैसे काम करेगा।
वैभव

5
क्या कोई और सोचता है कि इसका सुरक्षा जोखिम आपको एक यूआरएल से ट्रेस को सक्रिय करने की अनुमति देता है? (# 1) मैं इस सवाल को कम नहीं करने जा रहा हूं, लेकिन इसके जोखिम को समझना महत्वपूर्ण है।
केविन गॉफ

5
निरपेक्षता, आपको वास्तव में उस कोड को
#ifdef

महान टिप्पणियाँ, सुरक्षा पहलू की ओर इशारा करते हुए।
वैभव

2
Url से ट्रेस सक्रिय करना सुरक्षा जोखिम क्यों है? इसका उपयोग मुझे नुकसान पहुंचाने के लिए कैसे किया जा सकता है?
कमारेय

48

आप उपयोग कर सकते हैं:

 Request.Params[Control.UniqueId] 

एक नियंत्रण के मूल्य को प्राप्त करने के लिए BEFORE व्यूस्टेट को आरंभीकृत किया जाता है (Control.Text आदि इस बिंदु पर खाली होंगे)।

यह Init में कोड के लिए उपयोगी है।


Viewstate initialization अनुरोध के साथ व्यवहार नहीं करता है। IPostBackDataHandler कार्यान्वित नियंत्रण के LoadPostData विधि को बढ़ाने से पहले इसका उपयोग करें।
चपलाक

46

WebMethods।

आप ASP.NET AJAX कॉलबैक का उपयोग ASPX पृष्ठों में रखी गई वेब विधियों में कर सकते हैं। आप [WebMethod ()] और [ScriptMethod ()] विशेषताओं के साथ एक स्थिर विधि को सजा सकते हैं। उदाहरण के लिए:

[System.Web.Services.WebMethod()] 
[System.Web.Script.Services.ScriptMethod()] 
public static List<string> GetFruitBeginingWith(string letter)
{
    List<string> products = new List<string>() 
    { 
        "Apple", "Banana", "Blackberry", "Blueberries", "Orange", "Mango", "Melon", "Peach"
    };

    return products.Where(p => p.StartsWith(letter)).ToList();
}

अब, अपने ASPX पृष्ठ में आप यह कर सकते हैं:

<form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
        <input type="button" value="Get Fruit" onclick="GetFruit('B')" />
    </div>
</form>

और जावास्क्रिप्ट के माध्यम से अपने सर्वर साइड विधि का उपयोग कर कॉल करें:

    <script type="text/javascript">
    function GetFruit(l)
    {
        PageMethods.GetFruitBeginingWith(l, OnGetFruitComplete);
    }

    function OnGetFruitComplete(result)
    {
        alert("You got fruit: " + result);
    }
</script>

45

यह देखने के लिए जांचें कि क्या क्लाइंट अभी भी जुड़ा हुआ है, एक लंबे समय से चल रहे कार्य को शुरू करने से पहले:

if (this.Response.IsClientConnected)
{
  // long-running task
}

44

ASP.NET की एक छोटी ज्ञात और शायद ही कभी इस्तेमाल की जाने वाली विशेषता है:

टैग मानचित्रण

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

इस छोटे से फीचर के बारे में कुछ लेख:

ASP.NET में
टैग मानचित्रण ASP.NET 2.0 में टैग मानचित्रण का उपयोग करना

और उस आखिरी लेख से:

टैग मानचित्रण आपको अपने वेब एप्लिकेशन में प्रत्येक पृष्ठ पर संकलन समय पर संगत नियंत्रणों को स्वैप करने की अनुमति देता है। एक उपयोगी उदाहरण है अगर आपके पास एक स्टॉक ASP.NET नियंत्रण है, जैसे कि ड्रॉपडाउनलिस्ट, और आप इसे एक अनुकूलित नियंत्रण के साथ बदलना चाहते हैं जो ड्रॉपडाउनलिस्ट से प्राप्त होता है। यह एक नियंत्रण हो सकता है जिसे लुकअप डेटा की अधिक अनुकूलित कैशिंग प्रदान करने के लिए अनुकूलित किया गया है। हर वेब फ़ॉर्म को संपादित करने और अपने कस्टम संस्करण के साथ निर्मित DropDownLists को बदलने के बजाय, आप ASP.NET हो सकते हैं, यह प्रभावी रूप से आपके लिए web.config को संशोधित करके होता है:

<pages>
 <tagMapping>
   <clear />
   <add tagType="System.Web.UI.WebControls.DropDownList"
        mappedTagType="SmartDropDown"/>
  </tagMapping>
</pages>

यह आपकी टीम के अन्य डेवलपर्स के लिए बहुत भ्रमित करने वाला होगा
Aykut Akıncı

1
@Aykut - वास्तव में यह हो सकता है, यही कारण है कि मैं बताता हूं कि इसकी उपयोगिता संकीर्ण है, हालांकि, जब आवश्यक हो तो यह बहुत उपयोगी है। इसके अलावा, मैं यह सुनिश्चित करूँगा कि किसी भी भ्रम और अस्पष्टता से बचने के लिए टैग मैपिंग के किसी भी उपयोग को बहुत स्पष्ट रूप से प्रलेखित किया गया था।
क्रेगटीपी

43

HttpModules । वास्तुकला पागल सुरुचिपूर्ण है। शायद एक छिपी हुई विशेषता नहीं है, लेकिन शांत कोई भी कम नहीं है।


3
HttpModules ऐसा कुछ है जो उन्नत है, लेकिन मैं इसे दुर्लभ या कम उपयोग नहीं किया जाता (या मुझे भोला कहता हूं)। लेकिन हां, मुझे वास्तुकला से प्यार है।
वैभव

+1 क्योंकि बहुत सारे अनुभवी डेवलपर HttpModules के बारे में जानते हैं, लेकिन अनुरोधों के साथ उनके संबंधों को पूरी तरह से नहीं समझते हैं। (HttpHandlers के साथ भी यही बात)
जॉन Bubriski

34

आप एक .aspx पृष्ठ के भीतर ASP.NET टिप्पणियाँ का उपयोग कर सकते हैं सर्वर नियंत्रण सहित एक पृष्ठ के पूर्ण भागों पर टिप्पणी करने के लिए। और टिप्पणी की गई सामग्री को ग्राहक को कभी नहीं भेजा जाएगा।

<%--
    <div>
        <asp:Button runat="server" id="btnOne"/>
    </div>
--%>

5
ऐसे लोग हैं जो वास्तव में नहीं जानते कि टिप्पणियां हैं?
जो फिलिप्स

7
मैं यह है कि आप <में आधे aspx पृष्ठ मिल जब - टिप्पणियां ...
ब्रायन Rehbein

यह बल्कि ASP.NET
rafek

34

कोड अभिव्यक्ति बिल्डर

नमूना मार्कअप:

Text = '<%$ Code: GetText() %>'
Text = '<%$ Code: MyStaticClass.MyStaticProperty %>'
Text = '<%$ Code: DateTime.Now.ToShortDateString() %>'
MaxLenth = '<%$ Code: 30 + 40 %>'

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

web.config:

<system.web>    
    <compilation debug="true">
        <expressionBuilders>
            <add expressionPrefix="Code" type="CodeExpressionBuilder" />

यह सब होता है कि सीएस वर्ग:

[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(
        BoundPropertyEntry entry,
        object parsedData,
        ExpressionBuilderContext context)
    {            
        return new CodeSnippetExpression(entry.Expression);
    }
} 

1
शीर्षक में "और अन्य" के साथ आपका क्या मतलब है?
खालिद मुसाईद

वैसे मुझे लगता है कि मैं कभी दूसरों से नहीं मिला।
-लेर

2
+1, वास्तव में अच्छी सुविधा ... यह वास्तव में WPF के मार्कअप एक्सटेंशन के समान है
थॉमस लेवेस्क

यह प्रयोग के रूप में ही नहीं है <%= /*code*/ %>?
बेवाक्विना

33

ASHX फ़ाइल प्रकार का उपयोग:
यदि आप पृष्ठ इवेंट हैंडलर्स के माध्यम से जाने के बिना कुछ मूल HTML या xml का उत्पादन करना चाहते हैं तो आप एक साधारण तरीके से HttpModule को लागू कर सकते हैं

पेज को SomeHandlerPage.ashx के रूप में नाम दें और बस नीचे दिए गए कोड (बस एक पंक्ति) को इसमें डालें

<%@ webhandler language="C#" class="MyNamespace.MyHandler" %>

फिर कोड फ़ाइल

using System;
using System.IO;
using System.Web;

namespace MyNamespace
{
    public class MyHandler: IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";
            string myString = SomeLibrary.SomeClass.SomeMethod();
            context.Response.Write(myString);
        }

        public bool IsReusable
        {
            get { return true; }
        }
    }
}

5
यह ध्यान देने योग्य है कि आपको जरूरत पड़ने पर IRequiresSessionState या IReadOnlySessionState जोड़ना चाहिए, अन्यथा यह वहां नहीं होगा।
ट्रैकर 1

3
यह भी ध्यान देने योग्य है कि आप web.config में हैंडलर के सेटअप को निर्दिष्ट कर सकते हैं, ताकि आपको एक भौतिक एशैक्स फ़ाइल रखने की आवश्यकता न हो। या आप अपने एप्लिकेशन को वैश्विक असैक्स में प्रारंभ में प्रोग्रामर को पंजीकृत कर सकते हैं।
फिल

27

लक्ष्य ब्राउज़र और अधिक के आधार पर सर्वर नियंत्रण गुण सेट करना

<asp:Label runat="server" ID="labelText" 
    ie:Text="This is IE text" 
    mozilla:Text="This is Firefox text" 
    Text="This is general text" 
/>

उस एक थोड़े ने मुझे आश्चर्यचकित किया।


1
+1। क्या आप एक छोटा कोड नमूना इनलाइन पोस्ट कर सकते हैं। मुझे लगता है कि यह अधिक ध्यान और उत्थान उत्पन्न करेगा। मैं चाहता हूं कि यह ऊपर जाए।
जॉन के


26

मैंने एक asp.net एप्लिकेशन पर काम किया, जो एक प्रमुख सुरक्षा कंपनी द्वारा एक सुरक्षा ऑडिट के माध्यम से चला गया और मैंने एक कम ज्ञात लेकिन महत्वपूर्ण सुरक्षा भेद्यता को रोकने के लिए यह आसान चाल सीखी।

नीचे दी गई व्याख्या इस प्रकार है: http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKser_to_Counter_One-Click_Attacks

एक-क्लिक हमलों का सामना करने के लिए Page.ViewStateUserKey का उपयोग करने पर विचार करें। यदि आप अपने कॉलर्स को प्रमाणित करते हैं और ViewState का उपयोग करते हैं, तो एक क्लिक हमलों को रोकने के लिए Page_Init इवेंट हैंडलर में Page.ViewStateUserKey गुण सेट करें।

void Page_Init (object sender, EventArgs e) {
  ViewStateUserKey = Session.SessionID;
}

संपत्ति को उस मूल्य पर सेट करें जिसे आप जानते हैं कि प्रत्येक उपयोगकर्ता के लिए अद्वितीय है, जैसे कि सत्र आईडी, उपयोगकर्ता नाम या उपयोगकर्ता पहचानकर्ता।

एक क्लिक पर हमला तब होता है जब कोई हमलावर वेब पेज (.htm या .aspx) बनाता है जिसमें __VIEWSTATE नाम का एक छिपा हुआ फ़ॉर्म फ़ील्ड होता है जो पहले से ही ViewState डेटा से भरा होता है। ViewState को उस पृष्ठ से उत्पन्न किया जा सकता है जिसे हमलावर ने पहले बनाया था, जैसे कि 100 आइटम के साथ खरीदारी कार्ट पृष्ठ। हमलावर पृष्ठ पर ब्राउज़ करने के लिए एक असुरक्षित उपयोगकर्ता को फुसलाता है, और फिर हमलावर पृष्ठ को सर्वर पर भेजा जाता है जहां ViewState मान्य है। सर्वर के पास यह जानने का कोई तरीका नहीं है कि व्यूस्टैट हमलावर से उत्पन्न हुआ है। ViewState सत्यापन और HMAC इस हमले का विरोध नहीं करते क्योंकि ViewState मान्य है और पृष्ठ को उपयोगकर्ता के सुरक्षा संदर्भ के तहत निष्पादित किया जाता है।

ViewStateUserKey संपत्ति सेट करके, जब हमलावर ViewState बनाने के लिए एक पृष्ठ पर पहुंचता है, तो संपत्ति उसके नाम से आरंभ की जाती है। जब वैध उपयोगकर्ता पृष्ठ को सर्वर में भेजता है, तो इसे हमलावर के नाम के साथ आरम्भ किया जाता है। नतीजतन, ViewState HMAC चेक विफल हो जाता है और एक अपवाद उत्पन्न होता है।


2
आधार छोड़ने के लिए भी याद रखें। InInit (e); Page_Init () फ़ंक्शन को अपना काम करने के लिए।
Druid

मुझे लगता है कि यह ट्रिक विफल हो सकती है यदि कोई वास्तविक उपयोगकर्ता कुकीज़ स्वीकार नहीं करता है, या यदि सत्र समय समाप्त हो गया है।
अरस्तू

1
base.OnInit(e);यदि आप AutoEventWireup="true"पृष्ठ के लिए उपयोग कर रहे हैं तो आपको इसकी आवश्यकता नहीं है ।
एडम नोफ़िंगर

1
Druid: वह OnInit (जिस स्थिति में, base.OnInit (e) आवश्यक होगा) को ओवरराइड नहीं कर रहा है।
crdx

ViewStateUserKey के लिए सत्र ID का उपयोग करना वास्तव में सत्र शुरू होने के बाद ही काम करता है। इसका अर्थ यह भी है कि सत्र समाप्त होने के बाद ये पृष्ठ टाइमआउट हो सकते हैं। ऐसे मामलों में जहां वे समस्याएं एक चिंता का विषय हैं, आप कुछ अधिक टिकाऊ उपयोग करने पर विचार कर सकते हैं, जैसे उपयोगकर्ता का आईपी पता।
रिकएनजेड

25

HttpContext.Current.IsDebuggingEnabled

यह निर्धारित करने के लिए बहुत अच्छा है कि कौन सी स्क्रिप्ट आउटपुट (न्यूनतम या पूर्ण संस्करण) या कुछ और जो आप देव में चाहते हैं, लेकिन जी नहीं सकते।


मैं जनवरी से सहमत हूं, लेकिन कभी-कभी ऐसा ऐप दिलचस्प हो सकता है जो इसके निष्पादन राज्य डिबग / रिलीज़ से अवगत हो।
अलेक्जेंड्रे ब्रिसेबोइस

20

ASP.NET 3.5 SP1 में शामिल:

  • customErrors अब "ResponseRewrite" के मान के साथ "redirectMode" विशेषता का समर्थन करता है। URL बदलने के बिना त्रुटि पृष्ठ दिखाता है।
  • प्रपत्र टैग अब एक्शन विशेषता को पहचानता है। जब आप URL पुनर्लेखन का उपयोग कर रहे हों तो बढ़िया है

20

पैनल्स में DefaultButton संपत्ति।

यह एक विशेष पैनल के लिए डिफ़ॉल्ट बटन सेट करता है।


1
ध्यान दें, बटन के सभी प्रकार पर काम नहीं करता है, जैसे लिंकबटन!
कोवू


19

विन्यास फाइल का विभाजन करने के लिए configSource का उपयोग करना।

आप कॉन्फ़िगरेशन तत्वों को एक web.config फ़ाइल में अन्य .config फ़ाइलों के लिए कॉन्फ़िगरेशन तत्वों को धकेलने के लिए उपयोग कर सकते हैं, उदाहरण के लिए:

    <appSettings>
        <add key="webServiceURL" value="https://some/ws.url" />
        <!-- some more keys -->
    </appSettings>

... आपके पास संपूर्ण ऐपसेटिंग अनुभाग किसी अन्य कॉन्फ़िगरेशन फ़ाइल में संग्रहीत हो सकता है। यहाँ नया है web.config:

    <appSettings configSource="myAppSettings.config" />

myAppSettings.configफ़ाइल:

    <appSettings>        
        <add key="webServiceURL" value="https://some/ws.url" />
        <!-- some more keys -->
    </appSettings>

यह उन परिदृश्यों के लिए काफी उपयोगी है, जहां आप किसी ग्राहक को एक एप्लिकेशन तैनात करते हैं और आप नहीं चाहते कि वे स्वयं web.config फ़ाइल में हस्तक्षेप करें और बस उन्हें कुछ सेटिंग्स बदलने में सक्षम होना चाहते हैं।

रेफरी: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/use-configsource-to-split-configuration-files.aspx


1
यह किसी भी प्रकार की .net परियोजना, पूर्व डेस्कटॉप ऐप पर भी काम कर रहा है। कॉन्फिग्स
ज़ोल्टन वेर्स

17

MaintainScrollPositionOnPostbackपृष्ठ निर्देशन में विशेषता। इसका उपयोग पोस्टबैक के दौरान aspx पृष्ठ की स्क्रॉल स्थिति बनाए रखने के लिए किया जाता है।


1
उत्तर को बेहतर बनाने के लिए एक टिप्पणी उपयोगी होगी।
MRG

16

HttpContext.IsCustomErrorEnabled एक शांत सुविधा है। मैंने इसे एक से अधिक बार उपयोगी पाया है। यहाँ इसके बारे में एक छोटी पोस्ट है।


16

डिफ़ॉल्ट रूप से, कस्टम नियंत्रण के लिए टैग के बीच कोई भी सामग्री बाल नियंत्रण के रूप में जोड़ी जाती है। इसे एडपर्सडसबऑब्जेक्ट () में फ़िल्टरिंग या अतिरिक्त पार्सिंग के लिए ओवरराइड किया जा सकता है (उदाहरण के लिए, लिटरल कॉन्ट्रोल में टेक्स्ट कंटेंट):

    protected override void AddParsedSubObject(object obj)
     { var literal = obj as LiteralControl;
       if (literal != null) Controls.Add(parseControl(literal.Text));
       else base.AddParsedSubObject(obj);
     }

...

   <uc:MyControl runat='server'>
     ...this text is parsed as a LiteralControl...
  </uc:MyControl>

13

यदि आपके पास ASP.NET एक RSS फीड जनरेट कर रहा है, तो यह कभी-कभी पृष्ठ के शीर्ष पर एक अतिरिक्त लाइन डाल देगा। यह सामान्य RSS सत्यापनकर्ताओं के साथ मान्य नहीं होगा। आप पृष्ठ <@Page>के निचले भाग में पृष्ठ निर्देश डालकर इसके चारों ओर काम कर सकते हैं ।


7
RSS फ़ीड्स बनाने के लिए .ASHX हैंडलर का उपयोग करके क्या आप बेहतर नहीं करेंगे?
डैन डिपलो

मुझे लगता है कि परियोजना की जटिलता पर निर्भर करता है। हैंडलर बनाने और संकलित करने की क्षमता या कौशल हर एक के पास नहीं है। पेज asp.net में इसके लिए यथोचित काम करता है
केविन गॉफ

1
और आप कुछ का उपयोग कर सकते हैं जैसे <एस्प: रिपीटर> आरएसएस आइटम जेनरेट करने के लिए और अन्य ट्रिक करने के लिए (जैसे कि लॉगइन व्यू का उपयोग कुछ आइटम हटाने के लिए) जो ASHX IMO से स्ट्रिंग्स लिखने से बहुत बेहतर है
chakrit

LinqToXml + ASHX जाने का रास्ता है!
कार्लोस मुनोज

यह आरएसएस फ़ीड पीढ़ी की तुलना में बहुत अधिक उपयोगी है। IIRC, HTML5 को सही ढंग से सत्यापित करने के लिए शीर्ष पर पहली पंक्ति पर <! Doctype html> टैग होना चाहिए।
रॉय टिंकर

12

ASP.NET v3.5 जोड़े गए मार्गों से पहले आप केवल एक HTTPModule लिखकर और पेज पाइपलाइन (शुरुआती घटना की तरह) में अनुरोध को फिर से लिखकर अपने अनुकूल URL बना सकते हैं।

जैसे URL http: // servername / पेज / param1 / SomeParams1 / PARAM2 / SomeParams2 एक पृष्ठ पर नीचे (अक्सर नियमित अभिव्यक्ति का उपयोग) की तरह मैप किया जायेगा।

HttpContext.RewritePath("PageHandler.aspx?Param1=SomeParms1&Param2=SomeParams2");

DotNetNuke के पास वास्तव में एक अच्छा HttpModule है जो अपने अनुकूल urls के लिए ऐसा करता है। अभी भी उन मशीनों के लिए उपयोगी है जहाँ आप .NET v3.5 को तैनात नहीं कर सकते हैं।


इसके लिए ASP.NET
John Sheehan

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