【发布时间】:2016-04-19 01:22:52
【问题描述】:
我有一个非常基本的带有基本路由的 asp.net MVC 6 应用程序,并且我有一个自定义 ErrorController 来将错误路由到某些视图。
但是,我希望当用户键入一个不存在的 URL 时,会引发异常(我可以处理它)。但是,当我输入一些随机 URL 时不会引发异常,我只是得到一个空白页。我很确定这在 MVC
如果我只是在控制器中抛出异常,错误处理本身就可以正常工作。
Startup.cs(部分)
public void Configure(IApplicationEnvironment appEnv, IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler(HandleException);
}
app.UseStaticFiles();
app.UseMvc(routes => MapRoutes(routes, appEnv));
}
private static void MapRoutes(IRouteBuilder routes, IApplicationEnvironment env)
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "main", action = "index" });
}
private static void HandleException(IApplicationBuilder errorApp)
{
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
errorApp.Run(async context => HandleErrorContext(context));
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
}
private static void HandleErrorContext(HttpContext context)
{
var error = context.Features.Get<IExceptionHandlerFeature>();
var exception = error.Error;
if (exception == null)
{
context.Response.Redirect("../error/external");
}
else if (exception is ExpirationException)
{
context.Response.Redirect("../error/expired");
}
else if (exception is HttpException)
{
var httpException = exception as HttpException;
int code = httpException.GetHttpCode();
context.Response.Redirect("../error/external?code=" + code);
}
else
{
context.Response.Redirect("../error/external");
}
}
【问题讨论】:
-
看不到您在管道中包含自定义
ErrorController的位置。我在你的代码中遗漏了什么吗? -
我有另一种方法(在我粘贴的下方)可以处理该问题,如果我手动抛出异常,它可以正常工作。问题是根本没有抛出异常,所以它永远不会到达那个点。
标签: c# .net asp.net-mvc