Redirect 将NET CORE HttpResponse重定向到应用程序根目录
我正在使用Razor Pages、NET CORE 3,为了捕获和处理404错误,我实现了以下功能: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)
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/manyPageModel
::重定向会造成麻烦我已经编辑了这个答案,请检查它是否能满足需求。谢谢你的努力,但我认为这不是一个干净的解决方案。如果我有更多具有不同NotFound页面的应用程序呢?我找到了一个解决办法,也不是很好,但我想我可以接受。我会把它作为答案贴出来。