2023.07.17 | admin | 130次围观
运行程序debug以下就行了,后台程序报错,因为未对抛出的异常做任何处理,为了保护这些异常信息不被前端看到,你看到的就都会是这种500的错误,而且因为异常抛出的不会自动添加跨域的头,所以也会报跨域头的错误。所以建议就是:
1、debug看抛出了什么异常服务器内部错误的状态码是,问题就能解决了;
2、重写ExceptionFilterAttribute的OnException方法服务器内部错误的状态码是,对不同的exception返回不同的异常信息,比如文件不存在可以返回一个状态码为404的异常:
public override void OnException(ExceptionContext context) { var exception = context.Exception; if (exception == null)// should never happen { return; } //todo: log the exception. context.Result = new ObjectResult(new { Message = exception.Message }); if (exception is KeyNotFoundException) { context.HttpContext.Response.StatusCode = 404;//Not Found } else if (exception is ArgumentException || exception is ArgumentNullException) { context.HttpContext.Response.StatusCode = 400;//Bad Request } else if (exception is NotImplementedException) { context.HttpContext.Response.StatusCode = 501; //Not Implemented context.Result = new ObjectResult(new { Message = "Not implemented." }); } else if (exception is InvalidOperationException) { context.HttpContext.Response.StatusCode = 500; } else if (exception is MemberAccessException) { context.HttpContext.Response.StatusCode = 401;//Unauthorized } else// Other exception types you want to handle ... { context.HttpContext.Response.StatusCode = 500; context.Result = new ObjectResult(new { Message = "An error has occured." });//Exceptions whose message should not be shown to users. } }
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论