خطای E_LoadingAjax /api/RoxyFileman/DIRLIST در زمان اضافه کردن RoxyFileMan در MVC Core

11/26/2020 MVC
795

چهار روز بود که درگیر این خطا بودم این خطا زمانی رخ میداد که من از TinyMCE به عنوان ادیتور در  پروژه c# خودم استفاده کردم

 

E_LoadingAjax /api/RoxyFileman/DIRLIST

به این صورت که زمانی که کاربر در صفحه کنترل پنل خود از TinyMCE استفاده میکندو برای آپلود عکس یا فیلم و یا اسناد بخواهد از افزوه RoxyFileMan استفاده کند لازم است تا:  

  1.  فایل TinyMCE را به قسمت wwwroot  اضافه کند
  2. فایل RoxyFileMan برای دات نت را در پوشه جداگانه در کنار TinyMCE و یا در خود پوشه TinyMCE بگذارد.
  3. در پروژه های دات نت و  دات نت کور (.net , .net Core) لازم است تا یک کنترلر نیز به پروژه اضافه کنید،
  4. در پروژه های MCV (Model, Controller, View)  که به صورت پیشفرض پوشه های مربوطه را دارد به راحتی میتوانید Controller  مربوط به RoxyFileMan  را به پوشه کنترلر اضافه کنید تنها ادرس های مربوط به محل ذخیره را تغییر دهید ،  اما زمانی سر خودتون رو به  دیوار میکوبید( به مدت 4 روز برای من ) که خطا ایجاد شده است و نمیدانید خطا ممکن است مربوط به کدام قسمت کد باشد، آیا دسترسی به File Man دچار مشکل شده ، ایا بهترین جایگاه برای فایل Controller کجاست توی قسمت کنترل پنل بگذرام یا در روت سایت؟ ممکن است مثلا خطا مربوط به (../..) ادرس  دسترسی به RoxyFileMan باشد یا ممکن است تغییر ورژن دات نت کور و تغییر در اضافه شدم Json  به پیشفرضهای donet این خطا رو به وجو اورده ، یا نه ممکن است از تغییر روت در دات نت باشد و هزاران چیز دیگر که توی این چهار روز تست کردم 

اما کنترلر یک API است پس یا به صورت پیشفرض میتوانم با استقاده از Postman  به برگشتی های آن دسترسی پیدا کنم، تازه گرفتم  که مشکل از عدم دسترسی به کنترلر هست ، چرا سیستم به کنترلر دسترسی ندارد در صورتی که فایل کنترلر به صورت Public  تعریف شده

یه تغییر در دات نت کور داشتیم (از کدوم ورژن یادم نیست ) اما این بود که کنترلرها به جای ارث بری از Controller بهتر بود از ContrllerBase  استفاده کنید 

دوباره مشکل بعدی توی کنترلر از

return Json()

استفاده میشد سیستم خطا میداد

باید تبدیل میکردم به 

 return new JsonResult

 

از طرفی برای استفاده از root کردن Controller باید در روت پیشفرض تغییری دهید.

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

حالا پروژه را اجراکردم بلاخره حل شد

یه تغییر دیگه هم دادم و این هم فایل program.cs

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

             public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

خلاصه اینکه اضافه کردن کنترلر در Razor Pages ها باید کنترلر از ControllerBase  ارث بری کند نه از Controller تا در پروژه دیده شود 

خنده دار بود و لی لذت برنامه نویسی به همینه