我正在使用下面的中间件为HTTP状态代码400到599设置错误页面.所以访问/error/400会显示一个400错误请求错误页面.

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

[Route("[controller]")]
public class ErrorController : Controller
{
    [HttpGet("{statusCode}")]
    public IActionResult Error(int statusCode)
    {
        this.Response.StatusCode = statusCode;
        return this.View(statusCode);
    }
}

但是,访问/this-page-does-not-exist会导致出现通用IIS 404未找到错误页.

有没有办法处理不匹配任何路由的请求?在IIS接管之前,我如何处理这种类型的请求?理想情况下,我希望将请求转发到/error/404,这样我的错误控制器就可以处理它.

在ASP.NET4.6MVC5,我们不得不在Web上使用httpErrors部分.配置文件来执行此操作.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/error/404/" />
    </httpErrors>
  </system.webServer>
</configuration>

推荐答案

基于this SO item,IIS在达到UseStatusCodePagesWithReExecute之前获得404(并因此处理它).

你试过这个吗:https://github.com/aspnet/Diagnostics/issues/144美元?它建议终止接收到404的请求,这样它就不会转到IIS处理.下面是要添加到您的启动程序中的代码,以实现此目的:

app.Run(context =>
{
   context.Response.StatusCode = 404;
   return Task.FromResult(0);
});

这似乎只是IIS的问题.

Asp.net相关问答推荐

有人可以解释一下这个Eager 加载示例吗?

如何使用 executeReader() 方法仅检索一个单元格的值

如何在 GridView 单元格中的(即
)中呈现解码的 HTML

将 ASP.NET 成员资格表添加到我自己的现有数据库中,还是应该配置一个单独的 ASP.NET 成员资格数据库?

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

解析器错误消息:文件/TestSite/Default.aspx.cs不存在

将 null 转换为字符串的函数

如何将 Castle Windsor 与 ASP.Net Web 表单一起使用?

无法使用单例Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor中的范围服务MyDbContext

使用 NancyFx 的好处?

Asp.net 中的下拉列表验证使用必填字段验证器

在asp.net控件之间动态添加

使 Web.config 转换在本地工作

带有模型的 ASP.NET MVC 重定向

避免将重复元素添加到列表 C#

如何进入 IIS 管理器?

将字典绑定到中继器

IIS url 重写角色,除了一些 url

ASP.NET - 从静态方法/静态类访问会话?

Ashx 文件中的 HttpContext.Current.Session 为空