📜  从 net core 2.2 更新到 3.1 后出现 404 (1)

📅  最后修改于: 2023-12-03 14:49:18.538000             🧑  作者: Mango

从 Net Core 2.2 更新到 3.1 后出现 404

在将 .NET Core 2.2 项目升级到 .NET Core 3.1 时,你可能会遇到许多问题。 一个常见的问题是,你的应用程序出现了奇怪的 404 错误。

问题描述

在更改到新的 .NET Core 版本后,访问控制器和视图时出现 404 错误,尤其是在使用 ASP.NET Core 3.1 的新 Endpoint 路由系统时。

解决方案
1. 使用新的 Endpoint 路由系统

ASP.NET Core 3.1 引入了全新的 Endpoint 路由系统。为了让你的应用程序能够受益于这个新系统并解决 404 错误问题,你需要使用它。为此,请添加以下代码到 Startup.cs 文件的 ConfigureServices 方法中:

services.AddControllersWithViews();
services.AddRazorPages();

Markdown 代码片段:

```csharp
services.AddControllersWithViews();
services.AddRazorPages();

### 2. 检查你的控制器和视图的名称

在 .NET Core 3.1 中,控制器和视图的名称必须与它们的类名和文件名完全匹配。请检查你的代码以确保你的控制器和视图名称是正确的。

### 3. 检查你的启动脚本

在 .NET Core 3.1 中,主机建立的方式有所变化。确保你的启动脚本已升级以支持这些更改。

### 4. 使用重定向

为了避免 404 错误,你可以在 Startup.cs 的 Configure 方法上使用 URL 重定向。例如,如果你的应用程序的名称为 MyApplication,则可以将以下代码添加到 Configure 方法中:

```csharp
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.Use(async (context, next) =>
{
    if (context.Request.Path.Value == "/")
    {
        context.Response.Redirect("/Home/Index");
        return;
    }

    await next();
});

Markdown 代码片段:

```csharp
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.Use(async (context, next) =>
{
    if (context.Request.Path.Value == "/")
    {
        context.Response.Redirect("/Home/Index");
        return;
    }

    await next();
});

### 5. 联系 Microsoft 支持团队

如果以上解决方案均未起作用,请联系 Microsoft 支持团队以寻求帮助。

## 总结

升级到 .NET Core 3.1 可能会导致你的应用程序出现 404 错误,但是通过使用新的 Endpoint 路由系统、检查控制器和视图的名称、更新启动脚本、使用重定向或联系 Microsoft 支持团队,你可以轻松解决这些问题。