【问题标题】:Difference between UseStatusCodePagesWithRedirects and UseStatusCodePagesWithReExecute - Status Code Pages in Asp.net coreUseStatusCodePagesWithRedirects 和 UseStatusCodePagesWithReExecute 之间的区别 - Asp.net 核心中的状态代码页
【发布时间】:2020-08-23 00:38:40
【问题描述】:

我正在使用 UseStatusCodePages 中间件在我的应用程序上显示状态代码页,但它在 UI 上显示纯文本,没有任何其他信息,

我想显示带有状态代码信息的 UI 以及一些其他有用的信息,例如客户支持号码和更用户友好的页面。

我发现我们可以使用两种扩展方法来做到这一点,即 UseStatusCodePagesWithRedirects 和 UseStatusCodePagesWithReExecute。我从Microsoft Docs 发现的唯一区别是,

UseStatusCodePagesWithRedirects:向客户端发送 302。

UseStatusCodePagesWithReExecute:发送原始状态代码并执行重定向 URL 的处理程序。

这是唯一的区别吗?

【问题讨论】:

标签: asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

我认为主要区别在于 UseStatusCodePagesWithRedirects 将您重定向到错误控制器操作方法,而 UseStatusCodePagesWithReExecute 只是呈现页面而不重定向

示例

控制器动作

[Route("error/404")]
public IActionResult Error404(int code)
{

    return View("Error404");
}
[Route("error/{code}")]
public IActionResult Error(int code)
{
    return StatusCode(code);
}

启动Cinfigue

 app.UseStatusCodePagesWithRedirects("/error/{0}");

  app.UseStatusCodePagesWithReExecute("/error/{0}");

案例 1(404 错误)

网址:https://localhost:5001/notexits_page

1) UseStatusCodePagesWithRedirects
结果

网址是:https://localhost:5001/error/404

我们看到Error404页面

2) UseStatusCodePagesWithReExecute

结果

网址是:https://localhost:5001/notexits_page

我们看到Error404页面

案例 2(401 错误)

网址:https://localhost:5001/admin/users

1) UseStatusCodePagesWithRedirects
结果

网址是:https://localhost:5001/error/401

我们在无限循环中堆叠

1) UseStatusCodePagesWithRedirects
结果

网址是:https://localhost:5001/admin/users

我们看到 401 错误的默认浏览器错误页面

【讨论】:

  • 删除的答案是正确的,都是302,不知道什么时候用。
【解决方案2】:

当使用 app.UseStatusCodePagesWithRedirects("/Error/{0}") 并引发无效请求(比如说“/abc/xyz”)时;

  • 下发状态码404,app.UseStatusCodePagesWithRedirects("/Error/{0}")拦截请求并下发302状态码(表示请求资源的URI已临时更改)
  • 在发出 302 时发出另一个获取请求,这会导致 从 “/abc/xyz”到“/Error/404”。
  • 由于请求被重定向到特定的错误控制器,浏览器开发者工具中的请求状态代码为 200 ok

但是当使用 app.UseStatusCodePagesWithReExecute("/Error/{0}") 和无效请求(比如说“/abc/xyz”)时;

  • app.UseStatusCodePagesWithReExecute("/Error/{0}") 中间件拦截 404 状态码并重新执行指向 URL 的管道

  • 当中间件重新执行管道时,地址栏中的原始 URL“/abc/xyz”被保留。它不会从“/abc/xyz”更改为“/Error/{0}”。

  • 原始状态码(本例中为 404)也保存在开发者工具中

【讨论】:

    猜你喜欢
    • 2014-04-06
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2018-09-04
    相关资源
    最近更新 更多