अनुरोध पथ समर्थित फ़ाइल प्रकार से मेल नहीं खाता है

Aug 18 2020

मैं .Net Core MVC में नया हूँ। मैं एक मौजूदा परियोजना के लिए एक नियंत्रक जोड़ने की कोशिश कर रहा हूं, लेकिन मुझे त्रुटि मिल रही है

dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[4]
The request path https://localhost:5001/api/admin/... does not match a supported file type

इससे मुझे लगता है कि यह ऐप के लिए भी नहीं हो रहा है, लेकिन कहीं न कहीं किसी तरह के मिडलवेयर में ब्लॉक हो रहा है। या, यह फ़ाइल प्रकार के बारे में शिकायत क्यों करता है? यहां कोई "प्रकार" शामिल नहीं है, यह सिर्फ एक स्ट्रिंग है जिसमें एक URL है।

VSCode में मैंने मौजूदा नियंत्रक के साथ एक ही फ़ोल्डर में नया नियंत्रक जोड़ा, और बिल्ड ने ठीक काम किया। Ctrl-F5 इसे मेरे ब्राउज़र में लाता है और मैं पुराने API (कम से कम जो मैंने कोशिश की थी) चला सकता हूं लेकिन नया नहीं; यदि मैं नए नियंत्रक के लिए URL का उपयोग करता हूं तो यह 404 देता है।

इसमें स्वैगर भी स्थापित है, और स्वैगर पुराने एपीआई को दिखाता है लेकिन नया नहीं है।

Startup.cs में यह है

app.UseRouting();

और भी

app.UseEndpoints(endpoints =>
            {
              endpoints.MapAreaControllerRoute(
                    name: "areas",
                    areaName: "areas",
                    pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

              endpoints.MapControllerRoute("default",
                    "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapRazorPages();
            });

यह विंडोज 10 पर .net Core 3.1.302 और VSCode 1.48.0 है।

मैंने ट्यूटोरियल पढ़ने से सोचा था कि कंट्रोलर को जोड़ने के लिए मुझे जो कुछ भी करने की ज़रूरत थी वह कोड लिखने के लिए थी (एक मौजूदा, काम कर रहे नियंत्रक पर बारीकी से मॉडलिंग) और इसका निर्माण। लेकिन नए नियंत्रक को पंजीकृत करने या कहीं लॉग करने के लिए कुछ अतिरिक्त कदम होना चाहिए?

क्या यह सही कॉन्फ़िगर विधि है? Startup.cs से

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider services)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                CreateUserRoles(services).Wait();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

#if Release
            app.UseHttpsRedirection();
#endif
            app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "MobileApp.WebPortal", "wwwroot")),
                ServeUnknownFileTypes = true
            });

            app.UseSession();

            
            app.UseCookiePolicy();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();
            

            app.UseHangfireDashboard("/jobs", new DashboardOptions
            {
                Authorization = new [] { new HangfireAuthorizationFilter() },
                AppPath = "/"
            });

#if RELEASE
                //app.UseWebMarkupMin();
#endif

            app.UseEndpoints(endpoints =>
            {
                //endpoints.MapControllers();
                //endpoints.MapRazorPages();

                endpoints.MapAreaControllerRoute(
                    name: "areas",
                    areaName: "areas",
                    pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

                //endpoints.MapAreaControllerRoute(
                //    name: "internaldefault",
                //    areaName: "Internal",
                //    pattern: "Internal/{controller=Patient}/{action}/{id?}");


                //endpoints.MapAreaControllerRoute(
                //    name: "identity",
                //    areaName: "Identity",
                //    pattern: "Identity/{controller=Account}/{action=Login}/{id?}");

                endpoints.MapControllerRoute("default",
                    "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapRazorPages();
            });


            

            //var config = new MapperConfigurationExpression();
            //config.AddProfile(new MapperProfile());
            //Mapper.Initialize(config);

            var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2)};
            QueryCacheManager.DefaultMemoryCacheEntryOptions = options;
        }

जवाब

JohnThiesen Aug 19 2020 at 06:46

खैर, मेरे पास इसका आंशिक उत्तर है जो मुझे पूरी तरह से समझ में नहीं आता है। मैं VSCode में काम कर रहा था। मैंने अपने PatientListController के लिए एक नई फ़ाइल बनाई और इसे फ़ाइल पदानुक्रम में उपयुक्त स्थान पर रखा, और ऊपर वर्णित त्रुटि संदेश मिला (प्लस तथ्य यह है कि यह स्वैगर में नहीं दिखा था)।

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

VSCode में, स्पष्ट रूप से यह नहीं पता है कि यह नई फ़ाइल क्या है और इसलिए संकलक इसे अनदेखा करता है। इसलिए संकलित कोड में नए नियंत्रक का कोई निशान नहीं है।

विजुअल स्टूडियो में कंपाइलर जानता है कि मैंने एक नया कंट्रोलर जोड़ा है और ठीक वही कोड ठीक काम करता है और स्वैगर में नया एपि दिखाता है।

तो नई फ़ाइल के साथ क्या करना है, यह संकेत करने के लिए VSCode में कोई रास्ता होना चाहिए, लेकिन मुझे नहीं पता कि इसे कैसे करना है। और मुझे यह भी समझ में नहीं आता है कि VSCode उस संदर्भ में Visual Studio से अलग क्यों काम करता है।