2015-11-23 10 views
10

कुछ दिन पहले .NET कोर आरसी 1 जारी हो गया था और मैंने इसे इसके बारे में बहुत कुछ पढ़ने के बाद पहली बार जाने दिया, मुझे यह पसंद है लेकिन यह थोड़ा अलग है। मैं एमवीसी 6 & .NET कोर में एक छोटा ब्लॉग (एमवीसी 5 में निर्मित) माइग्रेट करने की कोशिश कर रहा हूं। यह मुश्किल नहीं था, लेकिन मैं वास्तव में एमवीसी 5 में सटीक वही ग्लोबल.एक्सएक्स सेटिंग्स को फिर से बनाने के लिए संघर्ष कर रहा हूं, एएसपी.नेट 5 में अब ग्लोबल.एक्सएक्स नहीं है इसलिए मैं यह समझने में असमर्थ हूं कि अधिकांश सेटिंग्स के प्रतिस्थापन क्या है कर रहे हैं?ASP.NET को वैश्विक.एक्सएक्स माइग्रेट करना 5

protected void Application_Start() 
    { 
     ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new RazorViewEngine()); 

     MvcHandler.DisableMvcResponseHeader = true; 
     AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 

     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
    } 

    protected void Application_BeginRequest() 
    { 
     Response.AddHeader("X-Frame-Options", "DENY"); 
    } 

    protected void Application_EndRequest() 
    { 
     if (Response.StatusCode != 301 && Response.StatusCode != 302) return; 

     var targetUrl = Response.RedirectLocation.Replace("ReturnUrl", "url"); 
     Response.RedirectLocation = targetUrl; 
    } 

    protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     string typeName; 

     byte userType = (byte)(Context.Request.IsAuthenticated ? byte.Parse(User.Identity.Name.Split('|')[2]) : 1); 

     switch (userType) 
     { 
      case 1: { typeName = "Client"; break; } 
      case 2: { typeName = "Admin"; break; } 
      default: { typeName = "Client"; break; } 
     } 

     var roles = new[] { typeName }; 

     if (Context.User != null) 
     { 
      Context.User = new GenericPrincipal(Context.User.Identity, roles); 
     } 
    } 

    private void Application_Error(object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 

     if (ex is HttpAntiForgeryException) 
     { 
      Response.Clear(); 
      Server.ClearError(); 
      Response.Redirect("/error/cookie", true); 
     } 
    } 

कृपया, ऊपर दिए गए कोड को एमवीसी 6 में किसी भी सेटिंग को छोड़ दिए बिना काम करने का कोई तरीका है? यह मेरे लिए एक सौदा ब्रेकर है, धन्यवाद।

+0

यह कोड एक गीथब रेपो पर रखने के लिए एक दिलचस्प प्रयोग होगा और रूपांतरण के बाद एमवीसी 6 परियोजनाओं के साथ-साथ इसे एक तरफ रखेगा। यदि आप कोड को धक्का देते हैं तो मुझे बताएं, मैं देखना चाहता हूं कि यह कैसा दिखता है और इसे बंद करने के लिए क्या होगा। – davidfowl

+0

आप ग्लोबल.एएसपीएक्स में जो कुछ भी कर रहे हैं वह कर सकते हैं लेकिन कस्टम कस्टम मिडलवेयर का उपयोग करते हैं। एएसपीनेट कोर में मिडलवेयर बनाना बहुत आसान है। http://andrewlock.net/adding-default-security-headers-in-asp-net-core/ –

उत्तर

2

शॉन Wildermuth से this blogpost और के अनुसार भी वह के बारे में एक सप्ताह पहले, जहां उन्होंने बताया कि MVC 5 Global.asax, packages.config, और web.config ASP 5 में चले गए हैं Pluralsight पर वेबिनार था। तो ASP 5 में पूर्व MVC 5 global.asax से सभी कॉन्फ़िगरेशन नई रूट स्टार्टअप.cs फ़ाइल में चला जाता है।

+1

मैं समझता हूं, लेकिन मैं स्टार्टअप.cs पर सभी उपरोक्त कोड को सफलतापूर्वक कैसे स्थानांतरित कर सकता हूं? मैं केवल अकेले रूटिंग को स्थानांतरित करने में कामयाब रहा। – Cindro

+0

@ सिंड्रो दुर्भाग्य से यह आसान सवाल नहीं है क्योंकि चीजें बहुत बदल गई हैं, इसलिए मुझे नहीं पता, क्षमा करें। उदाहरण के लिए बंडलिंग लगभग पूरी तरह से बदल दी गई थी: इस पोस्ट को देखें http://www.jeffreyfritz.com/2015/05/where-did-my-asp-net-bundles-go-in-asp-net-5/। एमवीसी 5 से ग्लोबल.एएसएक्स, पैकेज.कॉन्फिग और वेब.कॉन्फिग जैसी कई चीजों के लिए वही चीज़ें। तो सबसे अधिक संभावना है कि आपको अपने अधिकांश कोड को नए से बदलना होगा। – user2771704

+0

मुझे पता है, उम्मीद है कि समाधान/वैकल्पिक तरीका जल्द ही प्रकाशित होगा। बीएसडब्ल्यू, एएसपी.नेट 5 में बंडल करने के संबंध में, आप इस पैकेज का उपयोग 4.5 में बंडल करने के लिए कर सकते हैं: https://github.com/Shazwazza/Smidge – Cindro

3

Application_Start को प्रतिस्थापित करने के लिए, अपने स्टार्टअप क्लास में अपना प्रारंभिक कोड डालें।

Application_BeginRequest, Application_EndRequest, Application_AuthenticateRequest और Application_Error एक middleware द्वारा बदला जा सकता है

Application_AuthenticateRequest के बारे में, आप भी दस्तावेज़ को पढ़ना चाहिए (global.asax एक HTTP Module थे जो middleware द्वारा की जगह है) के बारे में Request features

+1

मैं इसे समझता हूं, लेकिन मुझे उन सभी मध्यवर्ती क्षेत्रों को फिर से बनाने के तरीके पर कोई अच्छा ट्यूटोरियल नहीं मिल रहा है। मैं बस निराश हूं कि एएसपी।नेट टीम इतनी बड़ी बदलाव करेगी और स्पष्ट दस्तावेज विकल्प प्रदान नहीं करेगी। – Cindro

+0

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

+0

@ सिंड्रो, [डॉक्टर] (https://docs.asp.net/en/latest/fundamentals/middleware.html) में एक नमूना है, [अनुरोध सुविधा दस्तावेज़] भी जांचें (https: //docs.asp .net/en/नवीनतम/मूलभूत/अनुरोध-विशेषताएं.html # मिडलवेयर-और-अनुरोध-विशेषताएं) जो 'Application_AuthenticateRequest' –

2

यहां तक ​​कि एक किया जा रहा है पुराना सवाल मैं इसे डाल दूंगा क्योंकि मैंने देखा है कि कोई भी global.asax विधियों को Startup.cs Configure सेक में माइग्रेट करने का तरीका नहीं देता है स्टार्टअप फ़ाइल के मोर्चे, तुम सिर्फ,

app.Use(async (context, next) => 
       {  
       //this will be call each request. 
       //Add headers  
        context.Response.Headers.Add(); 
       //check response status code 
        if(context.Response.StatusCode == 404) //do something 
       //check user 
       context.User.Identity.IsAuthenticated 
       //redirect 
       context.Request.Path = "some url" 
       await next() // will call next logic, in case here would be your controller. 
       }); 

जोड़ने के लिए यही एक काम समाधान नहीं है की जरूरत है यह सिर्फ कैसे मिडलवेयर और प्रत्येक अनुरोध के लिए आवेदन तर्क के साथ काम करने को दिखाने के लिए है।

उम्मीद है कि यह मदद करता है।

+0

को प्रतिस्थापित करने में मदद करेंगे, यह कोड थोड़ा सा मैला है, लेकिन यह सभी अनुरोधों को कैप्चर करता है। मेरी समस्या हल, thx। – alexb

संबंधित मुद्दे