我希望为每个状态代码显示不同的错误消息,例如:
如何在新的ASP。NETMVC6应用程序?我可以使用内置的UseErrorHandler方法执行此操作吗?
application.UseErrorHandler("/error");
另外,我注意到,即使使用上述处理程序,输入不存在的URL(例如/this-page-不存在)也会导致来自IIS的丑陋的404未找到错误页面。这也如何处理?
在MVC 5中,我们不得不使用ASP.NET的system.web customerrors部分和web.config文件中的system.webServer httpErrors部分,但是很难处理一个笨拙的、有很多非常奇怪的行为的。MVC 6是不是让这个简单了很多?
如何在新的ASP.NETMVC 6应用程序中实现这一点?我可以使用内置的UseErrorHandler方法做到这一点吗?
快速回答:不是以优雅的方式。
解释/替代:首先,让我们看看<code>UseErrorHandler</code>方法实际上在做什么:https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerExtensions.cs#L25其添加了以下中间件:https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerMiddleware.cs注意第29-78行(调用方法)
每当有请求传入时,就会执行 invoke 方法(由应用程序的位置控制)。在你的初创公司中使用错误处理程序(“...”)
.cs
)。因此,UseErrorHandler
是一种添加自定义中间件的美化方式:中间件=可以对http请求起作用的组件。
现在有了这种背景,如果我们想添加自己的错误中间件来区分请求。我们可以通过添加一个类似的中间件来做到这一点,就像默认的ErrorHandlerMiddleware
一样,通过修改这些行:https://github.com/aspnet/Diagnostics/blob/6dbbe831c493e6e7259de81f83a04d1654170137/src/Microsoft.AspNet.Diagnostics/ErrorHandlerMiddleware.cs#L48-L51 使用这种方法,我们可以根据状态代码控制重定向路径。
在MVC 5中,我们不得不使用ASP.NET的system.web customerrors部分和web.config文件中的system.webServer httpErrors部分,但是很难处理一个笨拙的、有很多非常奇怪的行为的。MVC 6是不是让这个简单了很多?
答案:它肯定是:)。就像上面的答案一样,修复方法在于添加中间件。通过Startup.cs
中的IApplication ationBuilder
添加简单中间件有一个快捷方式;在配置
方法的末尾,您可以添加以下内容:
app.Run(async (context) =>
{
await context.Response.WriteAsync("Could not handle the request.");
// Nothing else will run after this middleware.
});
这将起作用,因为这意味着您在未处理请求的情况下到达了http管道的末尾(因为它位于Startup.cs
中配置
方法的末尾)。如果要添加此中间件(以快速方式),并可以选择在您之后执行中间件,请按以下步骤操作:
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Could not handle the request.");
// This ensures that any other middelware added after you runs.
await next();
});
希望这有帮助!
您可以为此使用StatusCodePagesMiddleware
。以下是一个示例:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.UseStatusCodePagesWithReExecute("/StatusCodes/StatusCode{0}");
app.UseMvcWithDefaultRoute();
处理状态代码请求的控制器:
public class StatusCodesController : Controller
{
public IActionResult StatusCode404()
{
return View(viewName: "NotFound"); // you have a view called NotFound.cshtml
}
... more actions here to handle other status codes
}
一些注意事项:
我使用Spring中的webClient从GraphQL WebService中获取数据。此代码位于一个泛型方法中,该方法将响应体解码为不同类型的对象。如果响应是预期的类型,则它运行良好。 现在我想处理来自WebService的错误。因此,我的问题与此非常相似:Spring Webflux:Webclient:Get body on error我发现建议使用onStatus,但我的问题是,即使re
如何在SpringMVC中实现自定义http错误处理。 例如:我有一个urlhttp://localhost:8080/demo/canvas 它显示我的画布页面,但如果用户错过了网址并键入http://localhost:8080/demo/canva 它显示了Tomcat呈现的HTTP状态404。我希望它是自定义jsp页面。
我知道有人正在编写一个API,并希望使用HTTP状态代码来报告查询的结果。例如,如果用户调用,并且产品不存在,它将返回HTTP状态。我认为,因为这是一个有效的调用(即实际的HTTP请求没有格式错误),它应该返回一个code响应,并且只需要响应的主体类似于。 所以我的问题是,, 1) 使用HTTP状态码来传递非HTTP程序状态是否合适,如上面的示例所示? 2)是否有一些标准规范,或者至少是广泛使用的
问题内容: 我现在将脚本更改为jquery。这是我的旧javascript: 我现在想将其更改为jquery-ajax: 像在旧脚本中一样,如何测试请求返回的状态码(和responseText)? 问题答案: 试试这个: 要么:
我考虑在项目中使用fluent-http。 所以我尝试注入: 返回正确的字符串,但似乎没有使用状态代码。在这两种情况下,响应都有一个代码HTTP200。 注意:我发现一些状态代码是预先实现的: null
主要内容:1 1xx:信息,2 2xx:成功,3 3xx:重定向,4 4xx:客户端错误,5 5xx:服务器错误当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。 HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码: 1xx - 这意味着已收到请求,并且该过程正在继续。 2xx - 这意味着已成功接收,理解并接受了该