【发布时间】:2020-07-11 16:17:50
【问题描述】:
• 我需要通过重定向到我自己的自定义错误页面来管理未找到的页面和服务器问题错误,因此我按照以下方式完成了此操作,并且工作正常。
web.config
<customErrors mode="On">
<error statusCode="400" redirect="~/Error/Error400"/>
<error statusCode="404" redirect="~/Errors/Error404" />
<error statusCode="403" redirect="~/Error/Error403" />
<error statusCode="500" redirect="~/Errors/Error500" />
</customErrors>
• 现在,当我需要通过以下代码获取 angularjs http 错误(如 404)时,其中传递了控制器中不可用的错误方法 (GetDetai)(实际上是“GetDetails”)。
$http({
method: 'GET',
url: '/Admin/Dashboard/GetDetai',
headers: { "Content-Type": "application/json" }
}).then(function (result) {
console.log(result);
$scope.GetCustomer = result.data;
}, function (reason) {
console.log(reason);
if (reason.status == '404') {
console.log('Invalid Method/URL.');
}
else if (reason.status == '505') {
console.log('Internal server error.');
}
});
• 那么它在error函数中没有捕捉到404错误,它进入then函数并显示在下面
第一个控制台日志输出
{data: "
↵
↵
↵<!DOCTYPE html>
↵<html>
↵<head>
↵ <meta c…white;">Go Back To Home</a>
↵</body>
↵</html>
↵
↵", status: 200, config: {…}, statusText: "OK", headers: ƒ, …}
data: "
↵
↵
↵<!DOCTYPE html>
↵<html>
↵<head>
↵ <meta charset="utf-8" />
↵ <title></title>
↵ <style>
↵ body {
↵ display: inline-block;
↵ background: #00AFF9 url(https://cbwconline.com/IMG/Codepen/Unplugged.png) center/cover no-repeat;
↵ height: 100vh;
↵ margin: 0;
↵ color: white;
↵ }
↵
↵ h1 {
↵ margin: .8em 3rem;
↵ font: 4em Roboto;
↵ }
↵
↵ p {
↵ display: inline-block;
↵ margin: .2em 3rem;
↵ font: 2em Roboto;
↵ }
↵ </style>
↵</head>
↵<body>
↵ <h1>Whoops!</h1>
↵ <p>Something went wrong</p><br /><br />
↵
↵ <a href="/Home/Index" style="color:white;">Go Back To Home</a>
↵</body>
↵</html>
↵
↵"
status: 200
headers: ƒ (name)
config: {method: "GET", transformRequest: Array(1), transformResponse: Array(1), jsonpCallbackParam: "callback", paramSerializer: ƒ, …}
statusText: "OK"
xhrStatus: "complete"
__proto__: Object
• 但是当我评论/删除 web.config 自定义错误代码时,这个 angularjs http 调用错误函数正常工作,出现预期的 404 错误。
那么如何在不依赖和不影响其他代码的情况下正确管理这两种错误呢?
【问题讨论】:
-
请注意,您在“第一个错误”代码示例中得到的响应是
status: 200。这意味着当发生错误时,您正在检索的网站不会返回正确的 HTTP status code。 -
但它没有捕获错误函数,它来自 then 函数
-
@abbasarman 因为你的服务器有
status: 200作为响应。检查你共享的FIRST_ERROR。服务器应返回404。你能从网络标签分享确切的 url 调用吗? ? (请备注域名和所有敏感信息) -
@abbasarman :此外,在本地使用
angular.js而不是angular.min.js时,您的角度错误在使用angular.js时更具可读性 -
@abbasarman:现在说得通了。您需要发送 404 错误代码以让 UI 执行其操作。否则,您必须在所有响应中检查
<html>模式以区分。那就大错特错了。
标签: c# angularjs visual-studio model-view-controller