अगर मुझे OWIN Start..cs क्लास का उपयोग करना है और मुझे सभी कॉन्फ़िगरेशन को स्थानांतरित करना है तो क्या मुझे Global.asax.cs फ़ाइल की आवश्यकता है?


197

उदाहरण के लिए मान लीजिए कि एक नए ASP.NET MVC के अलग-अलग अकाउंट टेम्प्लेट के साथ MVC से बने 5 एप्लिकेशन, अगर मैं Global.asax.csक्लास को हटाता हूं और इसे कॉन्फ़िगरेशन कोड को Startup.cs Configuration()विधि के रूप में स्थानांतरित करता हूं, तो डाउनसाइड क्या हैं?

public partial class Startup
{
     public void Configuration(IAppBuilder app)
     {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        ConfigureAuth(app);
    }
}

मेरे लिए अपसाइड यह है कि ASP.NET 4 में ASP.NET 5 में अपग्रेड करते समय और उन टुकड़ों का उपयोग करना चाहिए जो अब स्टार्टअप.च क्लास में कॉन्फ़िगर किए जाने चाहिए, मैं निर्भरता इंजेक्शन और अन्य कॉन्फ़िगरेशन दो अलग-अलग वर्गों में नहीं कर रहा हूं जो संबंधित लगते हैं शुरू करने के लिए, और विन्यास।


AreaRegistration.RegisterAllAreas();मेरे लिए एक त्रुटि का कारण बना क्योंकि इस पद्धति को स्टार्टअप के दौरान इस तरह उपयोग करने की अनुमति नहीं है, केवल में Application_Start। हालाँकि, मेरा एप्लिकेशन API है और यह विधि जाहिरा तौर पर केवल MVC अनुप्रयोगों के लिए उपयोगी है: stackoverflow.com/questions/18404637/…
हार्वे

जवाबों:


171

स्टार्टअप.कोनफिगरेशन को Application_Start की तुलना में थोड़ा बाद में कहा जाता है, लेकिन मुझे नहीं लगता कि अधिकांश मामलों में अंतर बहुत मायने रखेगा।

मेरा मानना ​​है कि Global.asax में अन्य कोड रखने के प्रमुख कारणों में से हैं:

  1. MVC के पिछले संस्करणों के साथ संगति। (यही वह जगह है जहां हर कोई वर्तमान में इस कोड को खोजने की उम्मीद करता है।)
  2. अन्य ईवेंट हैंडलर जोड़ने की क्षमता। Global.asax में, आप Session_Start और Application_Error जैसे अन्य तरीकों को संभाल सकते हैं।
  3. प्रमाणीकरण परिदृश्यों की एक किस्म में सुधार। स्टार्टअप.कॉन्फ़िगरेशन विधि को केवल तभी कहा जाता है यदि आपके बिन निर्देशिका में Microsoft.Owin.Host.SystemWeb.dll है। यदि आप इस DLL को हटा देते हैं, तो यह चुपचाप Startup.Configuration को कॉल करना बंद कर देगा, जिसे समझना मुश्किल हो सकता है।

मुझे लगता है कि तीसरा कारण यह सबसे महत्वपूर्ण है कि हमने इस दृष्टिकोण को डिफ़ॉल्ट रूप से नहीं लिया, क्योंकि कुछ परिदृश्यों में यह DLL शामिल नहीं है, और यह उस स्थान को अमान्य किए बिना प्रमाणीकरण दृष्टिकोण को बदलने में सक्षम है जहां असंबंधित कोड (जैसे) मार्ग पंजीकरण) रखा गया है।

लेकिन अगर उन कारणों में से कोई भी आपके परिदृश्य में लागू नहीं होता है, तो मुझे लगता है कि आप इस दृष्टिकोण का उपयोग करके ठीक होंगे।


19
Startup.Configuration () का उपयोग करने का एक और लाभ यह आप आसानी से कोड का केवल 1 लाइन के साथ आत्म मेजबान Owin उपयोग कर अपनी वेबसाइट की मेजबानी कर सकते हैं: WebApp.Start <स्टार्टअप> ( " स्थानीय होस्ट: 3001 /" ) asp.net/web-api/ ओवरव्यू / होस्टिंग-एस्पनेट-वेब-एपीआई / ... यह एकीकरण परीक्षण लिखने के लिए विशेष रूप से आसान है
बोरिस लिप्सचित्ज़

16
"चुपचाप कॉल करना शुरू करने से रोकने के लिए स्टार्टअप.कॉन्फ़िगरेशन" साइड-इफ़ेक्ट, आप एक वेब जोड़ सकते हैं। Appfettup कुंजी "Owin: appStartup" जो स्पष्ट रूप से OWIN स्टार्टअप के लिए उपयोग किए जाने वाले प्रकार को निर्दिष्ट करता है, बजाय नाम सम्मेलन पर भरोसा करने के। देखो। यह अलग-अलग वातावरण (देव / परीक्षण / ठेस) के लिए अलग-अलग विन्यासों का समर्थन करने के लिए भी उपयोगी है
थियागो सिल्वा

2
# 3 के लिए +1। मैं एक वेब एपीआई के लिए एक दुबला शुरुआत चाहता था इसलिए मैंने एक खाली टेम्पलेट ASP.NET वेबसाइट बनाई और WebApi.Owinनगेट पैकेज जोड़ा । मैंने IIS पर चलने के लिए सब कुछ शामिल करने के लिए निर्भरता की गलत तरीके से अपेक्षा की थी। पता नहीं क्यों मुझे लगा कि चूंकि मैं पहली बार में IIS निर्भरता को कम करने के लिए ओवेन स्टार्टअप चाहता था।
१६:५५ पर Pluc

@ ममतासन अपने अंतिम कथन के साथ, आप मूल रूप से अनुमान लगा रहे हैं कि स्टार्टअप वर्ग केवल प्रमाणीकरण के लिए है?
सैम

@Sam, कोई स्टार्टअप अन्य कॉन्फ़िगरेशन के लिए उपयोग नहीं किया जाता है, जैसे कि फिल्टर और मार्ग, जैसा कि प्रश्न दिखाता है।
dmatson

33

पूर्ण चरणों की तलाश करने वालों के लिए: यदि आप एक OWIN आधारित बनाना चाहते हैं, तो IIS ने वेब API होस्ट किया है, इन चरणों को आपको प्राप्त करना चाहिए:

  1. File -> New -> Project
  2. संवाद में, Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
  3. समाधान पर, राइट क्लिक करें, जोड़ें Project -> Web -> ASP.NET Web Application(लक्ष्यीकरण। 4.6)

    3.1 अब ASP.NET 4.5 टेम्प्लेट में, टेम्पलेट के रूप में खाली चुनें

    3.2 यह दो नगेट पैकेज के साथ एक रिक्त समाधान बनाता है:

    Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0
    Microsoft.Net.Compilers v 1.0.0
    
  4. निम्नलिखित पैकेज स्थापित करें:

    Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3
    Install-Package Microsoft.AspNet.WebApi -Version 5.2.3
    Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
    

OWIN के लिए:

Install-Package Microsoft.Owin.Host.SystemWeb 
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost    

फिर कॉन्फ़िगरेशन विधि के साथ Startup.cs जोड़ें:

[assembly:OwinStartup(typeof(namespace.Startup))]
public class Startup
    {
        /// <summary> Configurations the specified application. </summary>
        /// <param name="app">The application.</param>
        public static void Configuration(IAppBuilder app)
        {
            var httpConfiguration = CreateHttpConfiguration();

            app
                .UseWebApi(httpConfiguration);
        }

        /// <summary> Creates the HTTP configuration. </summary>
        /// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns>
        public static HttpConfiguration CreateHttpConfiguration()
        {
            var httpConfiguration = new HttpConfiguration();
            httpConfiguration.MapHttpAttributeRoutes();

            return httpConfiguration;
        }
}

अब एक ऐसा वर्ग जोड़ें ApiController, जो इसे विरासत में मिला है , इसे RoutePrefixविशेषता और एक्शन विधि के साथ एनोटेट करें Route + HttpGet/PutPost(Http क्रिया के बाद आप हैं) और आपको जाने के लिए अच्छा होना चाहिए


1
शुक्रिया @dotnetguy !!! मैं पूरी तरह से Global.asax से छुटकारा पाने की कोशिश कर रहा हूं लेकिन सक्षम नहीं था। अंत में आपके चरणों का पालन करते हुए, इसने मेरे लिए काम किया। मेरे मामले में गायब हिस्सा Install-Package Microsoft.AspNet.WebApi.OwinSelfHostएक बार मेरे एपि में जोड़ने के संदर्भ था, मैं Global.asax को हटाने में सक्षम था।
योरडिम

2
@yyardim मुझे लगता है कि OwinSelfHost का Global.asax फ़ाइल से बहुत अधिक लेना-देना नहीं है, यह केवल आपको iis के बाहर अपने एप्लिकेशन को होस्ट करने का विकल्प देता है, उदाहरण के लिए विंडोज़ सेवा में
अलेक्जेंडर डर्क

@dotnetguy Install-Package WebApiContrib.Formatting.Razor 2.3.0.0एक स्थापित-पैकेज दिखाता है जिसमें त्रुटि नहीं मिली। के साथ काम कर रहे इस पैकेज की स्थापना हो गई Install-Package WebApiContrib.Formatting.Razor 2.3.0, तो बिना अंतिम.0
डायरो

1
@dotnetguy [assembly:OwinStartup(typeof(namespace.Startup))]नामस्थान भाग के ऊपर होना चाहिए अन्यथा यह निम्नलिखित त्रुटि देता हैAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Dairo

16

यह मेरी समझ है कि वेब एप्लिकेशन को कैसे शुरू / होस्ट किया जाता है, इसका अनुसरण करना बहुत ही भ्रामक है। एक छोटा सारांश:

1. क्लासिक ASP.NET: अनिवार्य IIS पाइपलाइन के अंतिम चरण में चलाने के लिए केवल एप्लिकेशन कोड लिखें

2. ASP.NET OWIN के साथ: एक .NET वेबसर्वर कॉन्फ़िगर करें और अपना एप्लिकेशन कोड लिखें। अब सीधे IIS से युग्मित नहीं किया जाता है, इसलिए अब आप इसका उपयोग करने के लिए मजबूर नहीं हैं।

3. ASP.NET Core: अपने एप्लिकेशन कोड का उपयोग करने और लिखने के लिए होस्ट और वेबसर्वर दोनों को कॉन्फ़िगर करें। यदि आप .NET .NET के बजाय पूर्ण .NET फ्रेमवर्क को लक्षित करते हैं तो .NET वेबसर्वर का उपयोग करने के लिए अनिवार्य नहीं है।


अब मैं विस्तार से थोड़ा और विस्तार करूँगा कि यह कैसे काम करता है और आवेदन शुरू करने के लिए किन वर्गों का उपयोग किया जाता है:

क्लासिक ASP.NET

क्लासिक ASP.NET अनुप्रयोगों Global.asaxमें प्रवेश बिंदु के रूप में फ़ाइल है। ये एप्लिकेशन केवल IIS में चलाए जा सकते हैं और आपका कोड IIS पाइपलाइन के अंत में निष्पादित हो जाता है (इसलिए IIS आपके कोड से पहले भी, प्रमाणीकरण, CORS के लिए ज़िम्मेदार है ...)। IIS 7 के बाद से आप अपने एप्लिकेशन को एकीकृत मोड में चला सकते हैं जो ASP.NET रनटाइम को IIS में एकीकृत करता है। यह आपके कोड को कार्यक्षमता को कॉन्फ़िगर करने में सक्षम बनाता है जो पहले (या केवल IIS में ही) संभव नहीं था जैसे कि आपकी फ़ाइल की स्थिति में url पुनर्लेखन या Application_Startआपकी Global.asaxफ़ाइल में नए <system.webserver>अनुभाग का उपयोग करें web.config

OWIN के साथ ASP.NET

सबसे पहले OWIN एक पुस्तकालय नहीं है, लेकिन .NET वेब सर्वर (उदाहरण के लिए IIS) वेब अनुप्रयोगों के साथ सहभागिता का एक विनिर्देश है। Microsoft के पास स्वयं OWIN का एक प्रोजेक्ट है जिसे प्रोजेक्ट कटाना (कई अलग-अलग NuGet पैकेजों के माध्यम से वितरित) कहा जाता है। यह कार्यान्वयन Microsoft द्वारा प्रदान किए गए IAppBuilderइंटरफ़ेस को आपको एक Startupक्लास और कुछ OWIN मिडलवेयर घटकों (OMC) में प्रदान करता है। का उपयोग करते हुएIAppBuilderआप मूल रूप से वेबसर्वर के लिए पाइपलाइन बनाने के लिए प्लग-एंड-प्ले तरीके से मिडलवेयर की रचना करते हैं (IIS7 में केवल ASP.NET पाइपलाइन के अलावा + ऊपर के बिंदु में) के बजाय IIS पाइपलाइन से बंधा हुआ है (लेकिन अब आप उपयोग करते हैं CORS के लिए एक मिडिलवेयर घटक, प्रमाणीकरण के लिए एक मिडलवेयर घटक ...)। इस वजह से, आपका एप्लिकेशन विशेष रूप से IIS के लिए अब और युग्मित नहीं है और आप इसे किसी भी .NET वेबसर्वर पर चला सकते हैं, उदाहरण के लिए:

  • OwinHost पैकेज आत्म मेजबान एक कटाना वेबसर्वर के साथ अपने आवेदन करने के लिए इस्तेमाल किया जा सकता।
  • Microsoft.Owin.Host.SystemWeb पैकेज सही जीवन की घटनाओं को आंतरिक रूप से करने के लिए अपने मिडलवेयर सदस्यता लेने के द्वारा, एकीकृत मोड में IIS7 + में अपने Owin आवेदन की मेजबानी के लिए प्रयोग किया जाता है।

वह चीज़ जो हर चीज़ को इतना भ्रामक बना देती है कि Global.asaxवह अभी भी OWIN Startupवर्ग के साथ एक साथ समर्थित है , जबकि वे दोनों समान काम कर सकते हैं। उदाहरण के लिए, आप Global.asaxOWIN मिडलवेयर का उपयोग करके कोर्स को और प्रमाणीकरण को लागू कर सकते हैं जो वास्तव में भ्रामक हो जाता है।

जब भी मुझे OWIN को जोड़ने की आवश्यकता होती है, मेरे अंगूठे का नियम पूरी तरह से Global.asaxफ़ाइल को हटाने के पक्ष में है Startup

ASP.NET कोर

ASP.NET Core अगला विकास है और अब आप .NET कोर या पूर्ण .NET फ्रेमवर्क को लक्षित कर सकते हैं। जब आप .NET कोर को लक्षित करते हैं तो आप अपने एप्लिकेशन को किसी भी होस्ट पर चला सकते हैं जो .NET मानक का समर्थन करता है। इसका मतलब है कि आप अब एक .NET वेबसर्वर (पिछले बिंदु की तरह) तक सीमित नहीं हैं, लेकिन अपने एप्लिकेशन को डॉकर कंटेनर, एक लिनक्स वेबसर्वर, IIS ... में होस्ट कर सकते हैं।

एक ASP.NET कोर वेब अनुप्रयोग के लिए प्रवेश बिंदु Program.csफ़ाइल है। वहां आप अपने होस्ट को कॉन्फ़िगर करते हैं और फिर से अपनी Startupकक्षा को निर्दिष्ट करते हैं जहां आप अपनी पाइपलाइन को कॉन्फ़िगर करते हैं। OWIN ( IAppBuilder.UseOwinएक्सटेंशन विधि का उपयोग करके ) वैकल्पिक है, लेकिन पूरी तरह से समर्थित है

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