是什么之间的区别customErrors,并httpErrors在ASP.NET MVC应用程序的web.config文件的部分?
使用每个部分的准则是什么?
我正在开发一个MVC3基础网站,我正在寻找一个处理错误的解决方案,并为每种错误渲染自定义视图.因此,假设我有一个"错误"控制器,其主要操作是"索引"(通用错误页面),并且此控制器将针对用户可能出现的错误(如"Handle500"或"HandleActionNotFound")执行更多操作.
因此,网站上可能发生的每个错误都可能由此"错误"控制器处理(例如:"Controller"或"Action"未找到,500,404,dbException等).
我使用Sitemap文件来定义网站路径(而不是路由).
这个问题已经回答了,这是对Gweebz的回复
我的最终applicaiton_error方法如下:
protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false"))
{
Log.Logger.Error("unhandled exception: ", Server.GetLastError());
}
else
{
try
{
var exception = Server.GetLastError();
Log.Logger.Error("unhandled exception: ", exception);
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
catch (Exception e)
{
//if Error controller failed for same reason, …Run Code Online (Sandbox Code Playgroud) 我想将自定义错误设置为true,以防止用户查看有关我的应用程序的详细信息.但我找不到我应该写的地方<customErrors mode="on">; 它应该在web.config中还是在web中,debug.config或者在哪里?
BR
我正在使用MVC 3与表单身份验证.在我的控制器或方法上,我正在执行以下操作:
[Authorize (Roles = "developer")]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想检查用户是否已登录,如果没有,请将其返回登录页面.但是,如果该用户的"IsInRole"检查返回false,我希望他们转到另一个类似"未授权"的视图.
完成这样的事情的最佳方法是什么?我希望避免创建一个新的Authorization属性,所以我不必重构整个应用程序中的每个Authorize属性,但如果这是必需的,我将走这条路.
我有一个asp.net mvc应用程序,我正在尝试使用IISExpress进行自定义错误.
适用于Casini罚款:
<customErrors mode="On" defaultRedirect="/error">
<error statusCode="404" redirect="/error/notfound"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
当我之前将mvc站点部署到IIS(7.5)之后,我所要做的就是设置我的自定义错误:
<httpErrors errorMode="Detailed"/>
Run Code Online (Sandbox Code Playgroud)
我已经尝试在httpErrors部分中明确指定状态代码,但没有任何作用.这是一个例子:
<httpErrors errorMode="Detailed" defaultResponseMode="Redirect">
<clear/>
<error statusCode="404" path="/error/notfound"/>
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢Ben
即使我解锁了我的网站后,我也收到以下错误.有什么原因?
HTTP错误500.19 - 内部服务器错误无法访问请求的页面,因为页面的相关配置数据无效.
Module CustomErrorModule
Notification SendResponse
Handler StaticFile
Error Code 0x80070021
Config Error Lock violation
Config File \\?\C:\Web\En\web.config
<validation validateIntegratedModeConfiguration="false"/>
<httpErrors errorMode="DetailedLocalOnly" defaultPath="/Oops.aspx" defaultResponseMode="ExecuteURL">
<clear></clear>
Run Code Online (Sandbox Code Playgroud)
我在applicationHost.config中完成了以下操作
<location path="mysite.net" overrideMode="Allow">
<system.webServer>
<handlers />
<httpErrors />
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud) 在ASP.NET MVC 3中创建自定义错误页面的最佳方法是什么?我特别感兴趣的是404错误,但也有403错误.我是MVC框架的新手,传统上我来自PHP背景,但我正在快速学习.
我在发布此问题之前做了我的研究,并发现了这个链接: asp.net MVC3上的自定义错误页面
这个解决方案看起来很简单虽然当我尝试在我的机器上实现它时,我遇到了以下问题:IController errorsController = new ErrorsController(); 在Application_Error()函数内部.它说"无法找到类型或命名空间名称'ErrorsController'(您是否缺少using指令或程序集引用?").
提前感谢您提供的帮助.
我有一个MVC网站(v5,虽然我认为它不相关)我在尝试建立数据库连接时故意引入错误(连接字符串中的服务器IP错误).当用户点击HomeController时,构造函数的一个依赖项是UserRepository(获取当前用户配置文件数据),这取决于数据库连接/会话是否可用.如果不是,则依赖性解析器无法注入UserRepository,并且当发生这种情况时会导致错误(与任何控制器的任何依赖关系一样),并且我得到一个通用的"没有为此对象定义的无参数构造函数".这是没用的.
所以我正在尝试使用自定义错误页面来检索内部异常并以友好的方式显示它.(因为在尝试获取HomeController时发生此错误,它实际上从未到达HandleErrorAttribute,因此依赖于CustomErrors).
所以我有一个带有一系列动作的ErrorsController ......
来自ErrorsComtroller.cs的片段
public ActionResult Error()
{
return View("Error_500");
}
public ActionResult NotFound()
{
return View("Error_404");
}
Run Code Online (Sandbox Code Playgroud)
来自web.config的代码段
<customErrors mode="On">
<error statusCode="404" redirect="~/errors/notfound" />
<error statusCode="500" redirect="~/errors/error" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
Error_500页面非常基本,它的模型类型为HandleErrorInfo,但如果它不存在,则使用它检查异常详细信息Server.GetLastError().问题是,GetLastError()总是为空,我得到我的自定义错误页面,但没有超出我的"意外错误发生"的一般反馈之外的其他详细信息.在做了一些挖掘后,我发现重定向后该方法不起作用,这是CustomErrors的默认方式.所以我改变了web.config来使用这一行代替......
来自web.config的代码段
这样它就不会导致重定向,并且GetLastError()应该有关于数据库连接问题的异常详细信息.事情是,现在我得到这个消息的默认ASP.NET错误页面.
处理您的请求时发生异常.此外,执行第一个异常的自定义错误页面时发生另一个异常.请求已终止.
所以我使用intellitrace进行了更多挖掘,我看到了有关数据库连接的异常.稍微向下看,我看到HomeController上没有无参数构造函数的错误,然后是一个关于在尝试创建'HomeController'类型的控制器时遇到错误的错误.但后来我看到一个人说
执行/ errors/error的子请求时出错
所以我直接导航到那条路径,页面工作正常.但是当它用于带有ResponseRewriteredirectmode的customerrors时,它会出错.我在动作的第一行(也是唯一一行)上设置了一个断行ErrorsController.Error(),但它永远不会被击中.如果我将自定义错误中的重定向路径替换为静态文件,它可以正常工作,但如果我将其更改回~/errors/error它,则会再次失败.
当指定使用MVC操作作为CustomErrors的url时是否存在问题ResponseRewrite?