gpt4 book ai didi

asp.net-mvc-3 - MVC3 自定义错误页面给出空白结果

转载 作者:行者123 更新时间:2023-12-02 00:08:52 25 4
gpt4 key购买 nike

使用发布的博客here和一个主题here因此我创建了一个 Controller 来处理我的所有错误页面。

在我的 Global.asax.cs 中,我有以下代码:

protected void Application_Error()
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
var routeData = new RouteData();

Response.Clear();
Server.ClearError();

routeData.Values["controller"] = "Error";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;

if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "Http403";
break;
case 404:
routeData.Values["action"] = "Http404";
break;
}
}

// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}

我的ErrorController看起来像这样:

public class ErrorController : BaseController
{
/// <summary>
/// Returns a default view for not having access.
/// </summary>
public ActionResult Unauthorized()
{
BaseModel viewModel = new BaseModel
{
LoginModel = new LogonModel(),
ProfessionsTopX = GetTopXProfessions()
};
return View(viewModel);
}

public ActionResult General(Exception exception)
{
return View("Exception", exception);
}

public ActionResult Http404()
{
//This line works
//return Content("Not found", "text/plain");

//This line presents a blank page
return View("404","_Layout");
}

public ActionResult Http403()
{
return View("403", "_Layout");
}

}

我的 Razor View 只包含下面的 html 片段;

@{
ViewBag.Title = "404";
}

<h2>404</h2>

This is a 404 page!

当我使用返回内容时,我得到一个纯文本输出,告诉我我正在查看 404 页。但是,我希望 404 页面适合我的设计的其余部分,因此我想使用我自己的 View 。然而,一旦我使用“返回 View ”,我就会看到一个空白页。我预计会遗漏一些非常明显的东西,但我没有看到它。

最佳答案

我也遇到了同样的问题,终于找到了适合我的解决方案。当我在 errorsController.Execute(rc); 上放置一个断点时,突破出现了。行,并使用“步入”,直到遇到此异常:

The view 'Detail' or its master was not found or no view engine supports the 
searched locations. The following locations were searched:
~/Views/Errors/Detail.aspx
~/Views/Errors/Detail.ascx
~/Views/Shared/Detail.aspx
~/Views/Shared/Detail.ascx
~/Views/Errors/Detail.cshtml
~/Views/Errors/Detail.vbhtml
~/Views/Shared/Detail.cshtml
~/Views/Shared/Detail.vbhtml

异常被吞掉了,我认为是因为它发生在 Application_Error 方法内部并且因为我设置了 Response.TrySkipIisCustomErrors = true

看到此错误后,我很快意识到我的问题只是名称不匹配之一:我的 Controller 实际上名为 ErrorController没有 's',则不是 ErrorsController 。对我来说问题是我设置了 routeData.Values["controller"] = "Errors"; ,这是错误的。将其切换为 routeData.Values["controller"] = "Error";解决了问题。

请注意,您不会立即捕获错误,因为您直接实例化 Controller ,并且如果该部分拼写错误,它将无法编译。但在 Controller 内部,调用 View() 将使用 RouteData 查找 View 。我们构建并传递给 RequestContext 的实例目的。因此,如果 Controller 名称拼写错误,MVC 不知道在哪里查找 View ,并且由于跳过 IIS 自定义错误,它会默默地失败。

长话短说:检查您的 Controller 和 View 名称。我假设如果 Controller 名称正确,但 View 的文件名不匹配,也会发生类似的情况。

关于asp.net-mvc-3 - MVC3 自定义错误页面给出空白结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com