我创建了一个asp.net网页,并将其上传到网络服务器上.但是,当我尝试远程查看页面时,我收到有关web.config文件中的customerror标记的错误.该页面在本地工作,没有错误或警告.此外,如果我将页面上传为.html文件,我可以远程查看它.我看到很多其他人都有这个错误,但是'解决方案'只是说将customErrors标签更改为'Off',我已经完成并且不起作用,你知道网络服务器是否存在问题或者是什么可能是这里的问题?
这是错误页面:
'/'应用程序中的服务器错误.运行时错误说明:服务器上发生应用程序错误.此应用程序的当前自定义错误>设置可防止远程查看应用程序错误的详细信息(出于安全原因).但是,可以在本地服务器计算机上运行>的浏览器查看它.
详细信息:要在远程>计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的"web.config"配置文件>中创建标记.然后,此标记>应将其"mode"属性设置为"Off".
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
注意:您看到的当前错误页面可以通过>修改应用程序的>配置标记的"defaultRedirect"属性以指向自定义错误页面URL来替换为自定义错误页面.
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是我的web.config文件:
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
<system.web>
<compilation debug="true"/>
<authentication mode="None"/>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我有一个ASP.Net网站,我想使用自定义错误页面.我将以下代码放在我的web.config中
<customErrors mode="On" defaultRedirect="~/error.aspx">
<error statusCode="404" redirect="~/error.aspx" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
问题是当我转到不存在的URL仍然使用IIS管理器中指定的404错误页面时.
问题:如何使用我创建的error.aspx页面?为什么IIS管理器中的设置会覆盖web.config?
这在某种程度上是主观的,取决于目标翻译语言,但请耐心等待一段时间.
我最近参与了一个翻译项目.目标是将MVC框架的字符串翻译成希腊语.
翻译框架的70%语言字符串,但有30%被故意遗漏.决定是我们不会翻译针对应用程序开发人员的错误消息.
这背后的原因(简言之)是:
面向设计师/程序员.程序员(甚至设计师:))应该对英语有基本的了解,至少足以让他们在Google上搜索它,如果他们不知道它意味着什么.(种族主义者?)
针对开发人员,并且在完美的世界中不应该向应用程序的最终用户显示,因为它们涉及Web应用程序本身的内部工作.即"您必须在数据库配置文件中设置数据库名称."
也许最重要的是,当他试图获得有关错误的更多信息/帮助时,他们会使开发人员的生活更加艰难.例如,上述错误在Google(引号)中产生8个结果,而其希腊语翻译恰好为0.
我知道这取决于目标翻译语言和应用程序本身的流行程度.例如,我猜测有大量关于德国SAP错误消息的文档(我知道,我知道,SAP是德语,但你明白了),而不是关于随机应用程序X的希腊错误消息文档全球约500个装置.
总结一下:当您为应用程序开发语言翻译包时,您是否翻译错误消息?您是否只为英语/西班牙语/德语/法语等主要语言做?或者你把它们完好无损?我不是在寻找"正确"或"正确"的答案,我正在寻找"最佳实践"的答案,或者如果您遇到的任何"官方"标准/政策中都定义了这个问题.
如何在grails中创建自定义验证器并使其将自定义字符串传递回视图并显示错误消息?
我看到很多人被困在同一个地方,我决定创建一个问题和答案来处理它.
我所做的所有谷歌搜索似乎都集中在"捕捉"错误上.如果满足某些条件,我希望能够提高自己.我尝试使用Error()类及其子类,但Eclipse无法识别它们.
这就是我想要做的:
if(some_condition) {
foobar();
}
else {
// raise an error
}
Run Code Online (Sandbox Code Playgroud)
愚蠢的问题,我知道,但我已经完成了我的谷歌搜索,我认为有人可以帮助我.
提前致谢!
感谢大家!如果你将来读这篇文章,这里是瘦的:
Java中的错误指的是您不应该尝试捕获的问题
例外是指您可能想要捕获的错误.
这是我的"修复"代码:
if(some_condition) {
foobar();
}
else {
throw new RuntimeError("Bad.");
}
Run Code Online (Sandbox Code Playgroud)
我RuntimeError()之所以使用是因为,正如一个答案所指出的那样,我不必事先声明我正在抛出一个错误,因为我依赖于一个条件,这非常有用.
谢谢大家!
我对在JavaScript中制作自定义Error类的"正确"方法的理解是这样的:
function MyError(message) {
this.name = "MyError";
this.message = message || "Default Message";
}
MyError.prototype = new Error();
MyError.prototype.constructor = MyError;
Run Code Online (Sandbox Code Playgroud)
(代码片段来自https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error.)
使用NodeJS,如果我尝试检查这种类型的错误,如:
var err = new MyError("whoops");
assert.ifError(err);
Run Code Online (Sandbox Code Playgroud)
...回溯将显示我在编译时创建的Error对象的上下文,它是MyError的原型,而不是我用"new MyError()"创建的MyError对象.
有没有什么方法可以获得实际错误的正确回溯数据,而不是原型?
我有一个C#Web表单ASP.NET 4.0 Web应用程序使用Routing for URL由于某种原因我的web.config的system.web部分中定义的自定义错误被完全忽略,它将回退IIS错误.
这完全被忽略了
<system.web>
<customErrors mode="On">
<error statusCode="500" redirect="~/Error" />
<error statusCode="404" redirect="~/404" />
<error statusCode="403" redirect="~/Error" />
</customErrors>
</system.web>
Run Code Online (Sandbox Code Playgroud)
这部分接管了
<system.webServer>
<httpErrors>
<!--<clear />-->
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" subStatusCode="-1" path="/App1/404" responseMode="Redirect" />
<error statusCode="500" prefixLanguageFilePath="" path="/App1/Error" responseMode="Redirect" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
这将是一个小小的不便,除了它回退到IIS本机而不是我的应用程序它完全绕过Elmah正确记录我的404异常.
编辑:只是为了避免任何这样的建议我只在customErrors停止工作后添加了httpErrors配置,所以我会有任何东西.
我们为ASP.NET抛出的异常配置了以下自定义错误页面:
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="400" redirect="~/400.aspx"/>
<error statusCode="404" redirect="~/404.aspx"/>
<error statusCode="500" redirect="~/500.aspx"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
设置redirectMode="ResponseRewrite"很重要,因为它确保URL不会更改(我相信ASP.NET执行Server.Transfer而不是Response.Redirect).
不幸的是,这不适用于请求验证错误.例如,如果我导航到/some/page/<script>ASP.NET的请求验证启动并且HttpException抛出了a,则启用自定义错误.但是,我没有显示自定义错误页面,而是收到以下消息:
'/'应用程序中的服务器错误.
运行时错误
描述:处理您的请求时发生异常.此外,执行第一个异常的自定义错误页面时发生另一个异常.请求已终止.
为什么ASP.NET无法在此方案中显示我的自定义错误页面?错误页面中没有代码,只有HTML,所以我知道错误页面本身不会抛出任何异常.
此外,如果我自己捕获错误Application_Error并发出Server.Transfer它工作正常,所以我很好奇ASP.NET正在做什么.
如果我们要自己解决这个问题,那么有更好的解决方案吗?
protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError() as HttpException;
if (ex != null
&& ex.Message.StartsWith("A potentially dangerous Request.Path value was detected from the client")
&& HttpContext.Current.IsCustomErrorEnabled)
{
Server.Transfer("400.aspx");
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个自定义异常类,如下所示:
<Serializable>
Public Class SamException
Inherits Exception
Public Sub New()
' Add other code for custom properties here.
End Sub
Public Property OfferBugSend As Boolean = True
Public Sub New(ByVal message As String)
MyBase.New(message)
' Add other code for custom properties here.
End Sub
Public Sub New(ByVal message As String, ByVal inner As Exception)
MyBase.New(message, inner)
' Add other code for custom properties here.
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
我在AJAX响应的返回中使用它来处理某些情况.
在我的AJAX响应的错误函数中,我确定错误属于我的自定义类型,如下所示:
....
ajax code....
.error = function (xhr, text, message) { …Run Code Online (Sandbox Code Playgroud) vb.net exception-handling exception custom-errors custom-error-handling
在我在共享主机提供程序中发布的ASP.NET 3.5网站中,我已经配置了我的web.config文件,如下所示:
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="AccessDenied.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
如果不存在(如"www.example.com/NotExistPage.aspx")的用户请求的页面,因为我们预计用户会被重定向到FileNotFound.htm页.
但是如果用户请求某个地址,例如:"www.example.com/NotExistDirectory"而没有.aspx扩展名,则用户将遇到IIS 7.5错误页面:
HTTP错误404.0 - 未找到您要查找的资源已被删除,名称已更改或暂时不可用.
已淘汰的错误信息:
Module IIS Web Core
Notification MapRequestHandler
Handler StaticFile
Error Code 0x80070002
Requested URL http://www.example.com:80/NotExistDirectory
Physical Path D:\Websites\example\example.com\wwwroot\NotExistDirectory
Logon Method Anonymous
Logon User Anonymous
Run Code Online (Sandbox Code Playgroud)
这是一个黄页,不是用户友好的,我们没想到.
我想知道在webconfig中设置customeError不支持这种类型的地址吗?如何防止用户看到此黄页.
编辑: 感谢大卫的回答,但我找到了实际的原因和正确的解决方案.请看我的答案.
custom-errors ×10
asp.net ×5
web-config ×3
exception ×2
grails ×1
iis-7 ×1
iis-7.5 ×1
inheritance ×1
java ×1
javascript ×1
localization ×1
node.js ×1
routing ×1
translation ×1
validation ×1
vb.net ×1
webserver ×1