6

मुझे कई वेब एपीआई नियंत्रकों के साथ एक एएसपी.NET कोर एप्लिकेशन मिला है। मैं यह नहीं बता सकता कि कुछ कनेक्शन है या नहीं, लेकिन एप्लिकेशन को वीएस2015 अपडेट 2 के साथ बनाया गया था, और अब मैं वीएस2015 अपडेट 3 के साथ काम कर रहा हूं। इसलिए मैंने एक और वेब एपीआई नियंत्रक बनाया, और जब उस नियंत्रक को कोई प्रश्न होएएसपी.नेट कोर एप्लिकेशन को कॉन्फ़िगर करने में सही क्रम क्या है?

System.NotSupportedException: The given path's format is not supported. 
    at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath) 
    at System.IO.Path.GetFullPath(String path) 
    at Microsoft.AspNet.FileProviders.PhysicalFileProvider.GetFullPath(String path) 
    at Microsoft.AspNet.FileProviders.PhysicalFileProvider.GetFileInfo(String subpath) 
    at Microsoft.AspNet.StaticFiles.StaticFileContext.LookupFileInfo() 
    at Microsoft.AspNet.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 
    at Microsoft.AspNet.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
    at Microsoft.AspNet.Diagnostics.Entity.MigrationsEndPointMiddleware.<Invoke>d__5.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
    at Microsoft.AspNet.Diagnostics.Entity.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at Microsoft.AspNet.Diagnostics.Entity.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
    at Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext() 

अजीब बात यह है कि किसी भी तरह StaticFileMiddleware नियंत्रक को एक सरल अनुरोध पर कार्रवाई करने में शामिल है: मैं इस अपवाद हो रही है। मैंने पहले

app.UseStaticFiles() 

मैं अभी भी पता करने के लिए कि यह कैसे हुआ चाहते

app.UseMvc(... 

फोन करके आवेदन को विन्यस्त का क्रम परिवर्तित कर इस समस्या को ठीक कर सकते हैं और क्या आवेदन कॉन्फ़िगर करने की सही क्रम है है।

ध्यान रखें कि पहले से जोड़े गए नियंत्रक कॉन्फ़िगर करने के दोनों तरीकों से ठीक काम कर रहे हैं, लेकिन नया केवल बाद वाले के साथ काम कर सकता है।

नया नियंत्रक स्थैतिक फ़ाइलों के साथ काम नहीं करता है।

संपादित रूटिंग: नियंत्रक में:

[Route("api/[controller]")] 
    public class ViewsController : Controller 
    { 
     [HttpGet("{path}", Name = "Views")] 
     public async Task<IActionResult> Get(string path) 
     { 
      return Json("bla"); 
     } 
    } 

Startup.cs में:

app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "angular2app", 
       template: "ng/{*.}", 
       defaults: new { controller = "Home", action = "Index" }); 

      routes.MapRoute(
       name: "api", 
       template: "api/{controller}/{action}/{id?}"); 

      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 

परेशान अनुरोध:

http://localhost:5000/api/Views/blablapath 
+1

कृपया "समस्या" का कारण बनने वाले नियंत्रक से कुछ कोड पोस्ट करें। –

+0

यह बात है। नियंत्रक से कोड किसी भी परेशानी का कारण नहीं बनता है, क्योंकि कॉल नियंत्रक तक कभी नहीं पहुंचता है। अपवाद पहले होता है। –

+0

नियंत्रक कोड के लिए पूछने का मेरा कारण यह है कि शायद ऐसा कुछ ऐसा है जो पिछले मौजूदा नियंत्रकों की तुलना में इसे "विशेष" बनाता है; रूट-एनोटेशन, विशेष नामकरण या जो कुछ भी ... –

उत्तर

4

जिस तरह से यह काम करता है वह यह है कि ब्राउज़र एक req बनाता है सर्वर के लिए, सर्वर आगे मेजबान के अनुरोध को उस बंदरगाह को सुनता है। होस्टिंग वातावरण विंडोज या आईफोन या विंडोज़ पर स्वयं होस्ट वातावरण पर आईआईएस हो सकता है। होस्टिंग वातावरण पहले मिडलवेयर से शुरू होने वाली एप्लिकेशन पाइपलाइन को निष्पादित करना शुरू कर देता है। मिडलवेयर का एक टुकड़ा दो चीजें कर सकता है जैसा कि मैंने इसे देखा:

सीधे प्रतिक्रिया दें और पाइपलाइन के बाकी हिस्सों को निष्पादित न करें (यह अभी भी पाइपलाइन में पहले से मौजूद मिडलवेयर निष्पादित करेगा) एक तरफ या किसी अन्य प्रतिक्रिया में हेरफेर करें , जो प्रमाणीकरण है या एक जवाबी कार्रवाई के लिए कुछ अतिरिक्त डेटा जोड़ सकता है इस तरह के HTML, सीएसएस, छवि, और JavaScript जैसी

enter image description here

स्टेटिक फ़ाइलें, संपत्ति है कि एक ASP.NET कोर एप्लिकेशन ग्राहकों को सीधे सेवा कर सकते हैं कर रहे हैं स्थिर फ़ाइलों को सेवा के क्रम में, आपको पाइपलाइन पर स्थैतिक फ़ाइलों को जोड़ने के लिए मिडलवेयर को कॉन्फ़िगर करना होगा। ऐप। यूसेस्टैटिकफाइल() फ़ाइलों को वेब रूट (डिफ़ॉल्ट रूप से wwwroot) servable में बनाता है।

UseMvc() विस्तार विधि रूटिंग मिडलवेयर अनुरोध पाइपलाइन में जोड़ती है और एमवीसी को डिफ़ॉल्ट हैंडलर के रूप में कॉन्फ़िगर करती है।

तो आप एमवीसी मिडलवेयर का उपयोग करने के लिए इनऑर्डर को देखते हैं, आपको अपनी स्थिर फाइल संसाधन प्रदान करना चाहिए और यही कारण है कि आपका अपवाद पहले से ही कह रहा है।

+1

रंगीन उत्तर के लिए धन्यवाद! लेकिन यह अभी भी मेरे लिए स्पष्ट नहीं है कि क्यों कुछ नियंत्रकों को उस आदेश के साथ परेशानी नहीं होती है, और कुछ लोग ध्यान देते हैं कि उनमें से कोई भी स्थैतिक फाइल नहीं करता है। –

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