Redirect 将NET CORE HttpResponse重定向到应用程序根目录

Redirect 将NET CORE HttpResponse重定向到应用程序根目录,redirect,root,asp.net-core-3.1,Redirect,Root,Asp.net Core 3.1,我正在使用Razor Pages、NET CORE 3,为了捕获和处理404错误,我实现了以下功能: app.UseStatusCodePages(context => { var request = context.HttpContext.Request; var response = context.HttpContext.Response; if (response.StatusCode == (int)HttpStatusCode.NotFound)

我正在使用Razor Pages、NET CORE 3,为了捕获和处理404错误,我实现了以下功能:

app.UseStatusCodePages(context =>
{
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;

    if (response.StatusCode == (int)HttpStatusCode.NotFound)
    {
        response.Redirect("./NotFound", false);
    }
    return Task.CompletedTask;
});
它在这里工作:
http://myServer/myApp/nonExistingPage
->
http://myServer/myApp/NotFound

在这种情况下,它显然不起作用:
http://myServer/myApp/doesNotExists/nonExistingPage
->
http://myServer/myApp/doesNotExists/NotFound

我读到重定向应该是
response.redirect(“~/NotFound”,false)。有了这个,我得到了:

http://myServer/myApp/nonExistingPage
->
http://myServer/NotFound

http://myServer/myApp/doesNotExists/nonExistingPage
->
http://myServer/NotFound


我遗漏了什么吗?

/
表示当前目录。要使用此url访问
NotFound
,需要在当前目录中创建此文件<代码>~/
表示web根路径
wwwroot/
。您可以尝试以这种方式修改它

response.Redirect("/NotFound", false);
它将不受目录的影响

编辑:

您可以在
wwwroot
目录中创建文件
NotFound.html
。发生404时重定向到此页面。需要修改参数

 response.Redirect("https://localhost:44344/NotFound.html", false);

或者在服务器的文件夹中创建此文件,然后重定向到当前项目中的该文件。

/
表示当前目录。要使用此url访问
NotFound
,需要在当前目录中创建此文件<代码>~/表示web根路径
wwwroot/
。您可以尝试以这种方式修改它

response.Redirect("/NotFound", false);
它将不受目录的影响

编辑:

您可以在
wwwroot
目录中创建文件
NotFound.html
。发生404时重定向到此页面。需要修改参数

 response.Redirect("https://localhost:44344/NotFound.html", false);

或者在服务器的文件夹中创建此文件,然后重定向到当前项目中的该文件。

经过长时间的研究,我一直无法找到正确的方法来处理它。 作为解决办法,我提出了以下解决方案:

app.UseStatusCodePages(context =>
{
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;

    if (response.StatusCode == (int)HttpStatusCode.NotFound)
    {
        if (request.Path.HasValue && request.Path.Value.EndsWith("/NotFound"))
        {
            response.Redirect("../NotFound");
        }
        else
        {
            response.Redirect("./NotFound");
        }
    }
    return Task.CompletedTask;
});
首先,它被重定向到
/NotFound
。如果重定向页面也不存在,则表示我们不在项目的根目录下,因此会再次捕获该页面并将其重定向到
。/NotFound
,这意味着级别较低,依此类推,直到找到该页面为止(在根目录下)


如果有人有更好/更好的解决方案,欢迎您发布。

经过长时间的研究,我还没有找到合适的方法来处理它。 作为解决办法,我提出了以下解决方案:

app.UseStatusCodePages(context =>
{
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;

    if (response.StatusCode == (int)HttpStatusCode.NotFound)
    {
        if (request.Path.HasValue && request.Path.Value.EndsWith("/NotFound"))
        {
            response.Redirect("../NotFound");
        }
        else
        {
            response.Redirect("./NotFound");
        }
    }
    return Task.CompletedTask;
});
首先,它被重定向到
/NotFound
。如果重定向页面也不存在,则表示我们不在项目的根目录下,因此会再次捕获该页面并将其重定向到
。/NotFound
,这意味着级别较低,依此类推,直到找到该页面为止(在根目录下)


如果有人有更好/更好的解决方案,欢迎您发布。

在哪个目录中找不到。cshtml放置?我的所有页面都在{ProjectFolder}/pages中。但是我对这些东西很着迷,因为应用程序在本地主机上运行的地方/一切都很好。如果我把它部署在myServer/myApp/many
PageModel
::重定向会造成麻烦我已经编辑了这个答案,请检查它是否能满足需求。谢谢你的努力,但我认为这不是一个干净的解决方案。如果我有更多具有不同NotFound页面的应用程序呢?我找到了一个解决办法,也不是很好,但我想我可以接受。我将把它作为答案发布。找不到哪个目录。cshtml放在哪里?我所有的页面都在{ProjectFolder}/pages中。但是我对这些东西很着迷,因为应用程序在本地主机上运行的地方/一切都很好。如果我把它部署在myServer/myApp/many
PageModel
::重定向会造成麻烦我已经编辑了这个答案,请检查它是否能满足需求。谢谢你的努力,但我认为这不是一个干净的解决方案。如果我有更多具有不同NotFound页面的应用程序呢?我找到了一个解决办法,也不是很好,但我想我可以接受。我会把它作为答案贴出来。