بررسی جامع خطای 404 بعد از ارتقاء به Visual Studio 2022
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۲/۱۷ ۰۷:۲۲
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
https://localhost:5001/ ارسال شده، اما هیچ کنترلر، اکشن یا فایل استاتیکی برای این مسیر پیدا نشده و درخواست به انتهای پایپلاین middleware رسیده، بدون اینکه توسط کد برنامه مدیریت شود. این مشکل ممکن است به دلایل مختلفی پس از آپدیت ویژوال استودیو رخ داده باشد. در ادامه دلایل احتمالی و راهحلهای ممکن را بررسی میکنیم:launchSettings.json یا پیکربندیهای مربوط به پروفایل اجرا (مانند IIS Express یا Kestrel) را تغییر داده باشد.default route) یا عدم فراخوانی app.MapControllers() میتواند باعث این خطا شود.index.html یا index.cshtml) وابسته است، ممکن است تنظیمات مربوط به UseStaticFiles یا مسیر wwwroot به درستی کار نکند.UseHttpsRedirection یا مشکلات مربوط به گواهی SSL میتواند باعث خطا شود (نصب مجدد مجوزهای آزمایشی SSL توصیه میشود).bin و obj شده باشد.Startup.cs) استفاده میکنید، ممکن است ترتیب یا تنظیمات middlewareها به درستی پیکربندی نشده باشد.Properties/launchSettings.json را باز کنید و مطمئن شوید که تنظیمات پورت و URL با آنچه در خروجی خطا (مثلاً https://localhost:5001) دیده میشود، همخوانی دارد. یک نمونه تنظیمات به این شکل است:{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5000",
"sslPort": 5001
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"YourAppName": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}applicationUrl و sslPort با پورتهای مورد استفاده (5000 برای HTTP و 5001 برای HTTPS) مطابقت دارند."commandName": "Project" را بررسی کنید.Program.cs را بررسی کنید تا مطمئن شوید که middlewareها و مسیرها به درستی تنظیم شدهاند. یک نمونه کد برای یک برنامه MVC به این شکل است:var builder = WebApplication.CreateBuilder(args);
// افزودن سرویسهای MVC
builder.Services.AddControllersWithViews();
var app = builder.Build();
// تنظیم پایپلاین درخواست
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles(); // برای سرو فایلهای استاتیک
app.UseRouting();
app.UseAuthorization();
// تنظیم مسیر پیشفرض برای MVC
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();app.UseRouting() و app.MapControllerRoute (برای MVC) یا app.MapControllers() (برای Web API) فراخوانی شدهاند.app.MapGet("/", ...) تعریف شده باشند.wwwroot/index.html) وابسته هستید، مطمئن شوید که app.UseStaticFiles() فراخوانی شده است./ باید کنترلری مثل زیر داشته باشید:public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}Views/Home/Index.cshtml وجود دارد.[Route] یا [ApiController] به درستی تنظیم شدهاند.bin و obj را از پروژه حذف کنید.%LocalAppData%\Microsoft\VisualStudio\17.0_xxx\ComponentModelCache را حذف کنید..csproj) را بررسی کنید تا مطمئن شوید که نسخه .NET مورد استفاده (مثلاً <TargetFramework>net9.0</TargetFramework>) با SDK نصبشده سازگار است (اگر از داتنت 9 استفاده شده، باید SDK مرتبطی را هم نصب کنید).appsettings.json یا Program.cs درست است. به عنوان مثال:var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseKestrel(options =>
{
options.ListenLocalhost(5000, listenOptions => listenOptions.UseHttps());
});dotnet dev-certs https --trust را اجرا کنید تا گواهی توسعه نصب و اعتماد شود.app.UseHttpsRedirection() را غیرفعال کنید.dotnet clean dotnet build dotnet run
https://localhost:5001 اجرا میشود یا خیر.dotnet run کار کرد، مشکل احتمالاً در تنظیمات ویژوال استودیو یا IIS Express است.Program.cs، launchSettings.json و ساختار پروژه را با پروژه مشکلدار مقایسه کنید.builder.Services.AddLogging(logging =>
{
logging.AddConsole();
logging.SetMinimumLevel(LogLevel.Debug);
});Program.cs روی app.Run() قرار دهید و درخواست را بررسی کنید.app.UseSpa() و تنظیمات مربوط به آن به درستی پیکربندی شده است.