我想在mvc中创建一个Cutsum错误。
我在web.config中添加了自定义错误
<customErrors mode="On" defaultRedirect="~/Error">
<error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>
在全球
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Server.ClearError();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
routeData.Values.Add("action", "Index");
routeData.Values.Add("exception", exception);
if (exception.GetType() == typeof(HttpException))
{
routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
}
else
{
routeData.Values.Add("statusCode", 500);
}
IController controller = new ErrorController();
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
}
并在控制器中
public class ErrorController : Controller
{
//
// GET: /Error/
public ActionResult Index(int statusCode, Exception exception)
{
Response.StatusCode = statusCode;
var model = new ErrorModel() {Exception = exception, HttpStatusCode = statusCode};
return View(model);
}
public ActionResult NotFound()
{
Response.StatusCode = 404; //you may want to set this to 200
return View();
}
}
并在视野中
@model Behkam.Models.ErrorModel
@if (Model != null && HttpContext.Current.IsDebuggingEnabled)
{
<i class="icon-404"></i>
<h1>@Model.HttpStatusCode</h1>
<h2>خطا در دریافت اطلاعات ! </h2>
<p class="page-404">@Model.Exception.Message .@Html.ActionLink("بازگشت به کارتابل ", "index", "Dashboard")</p>
}
当我在页面中收到错误时,它会返回所有异常的错误:
传递到字典中的模型项的类型是&#39; System.Web.Mvc.HandleErrorInfo&#39;,但此字典需要类型为&#39; Behkam.Models.ErrorModel
的模型项
答案 0 :(得分:0)
这是因为异常由代码中某处的[HandleError]
属性处理(异常的堆栈跟踪或目标站点会告诉您在哪里。)
所以你想找到并删除那个属性。 [HandleError]
创建'System.Web.Mvc.HandleErrorInfo'并将其传递到\Views\Shared\Error.cshtml
作为模型,但当然您已将错误页面的模型更改为
@model Behkam.Models.ErrorModel
因此:
传递到字典中的模型项是类型的 'System.Web.Mvc.HandleErrorInfo',但这个字典需要一个模型 'Behkam.Models.ErrorModel
类型的项目
请注意,标准MVC应用程序模板执行以下操作以全局注册[HandleErrorAttribute]
:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
所以这可能是罪魁祸首。