我需要抛出HttpException期间AjaxRequest在Controller和CustomFilterAttribute
当我把Exception在Controller与403错误
[HttpPost]
[CustomAuthorize]
public ActionResult AjaxSelectBinding()
{
// 403 Error code
throw new HttpException((int)HttpStatusCode.Forbidden, "Forbidden");
}
Run Code Online (Sandbox Code Playgroud)
在客户端脚本中,我总是得到结果代码 - 500
$.ajax({
type: 'POST',
url: '/Groups/AjaxSelectBinding',
success: function(data) {
},
error: function (xhr, ajaxOptions, thrownError) {
// HERE I GET ALWAYS 500 ERROR CODE
}
});
Run Code Online (Sandbox Code Playgroud)
我怎么能扔HttpException在我FilterAttribute和获得客户端页面的代码.我尝试这样做,但我得到200状态代码:
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
SharedControllerBase ctrl …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指令或程序集引用?").
提前感谢您提供的帮助.
使用博客张贴在这里和一个主题在这里,所以我已经创建了一个控制器,它应该处理我所有的错误页面.
在我的Global.asax.cs中,我得到了以下代码:
protected void Application_Error()
{
var exception = Server.GetLastError();
var httpException = exception as HttpException;
var routeData = new RouteData();
Response.Clear();
Server.ClearError();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "Http403";
break;
case 404:
routeData.Values["action"] = "Http404";
break;
}
}
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
IController errorsController = new ErrorController();
HttpContextWrapper …Run Code Online (Sandbox Code Playgroud) 当发生HttpRequestValidationException时,如何将用户重定向到自定义错误页面.我试图在我的basecontroller中捕获它:
protected override void OnException(ExceptionContext exceptionContext)
{
if (exceptionContext.Exception is HttpRequestValidationException)
{
this.View("CustomError").ExecuteResult(this.ControllerContext);
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到例外:从客户端检测到一个潜在危险的request.form值
我尝试在应用程序的较低层处理我的异常,因为它们可以被处理(记录它们).但是,有一些错误会导致应用程序崩溃,就像参数是NULL一样,并且在这种情况下不应该抛出ArgumentNullException.
如果考虑调用服务层的控制器层.我想避免服务层抛出异常,因为我想在这里处理所有这些(日志记录),但我觉得在这种情况下这是不可能的(如NULL情况).
那么避免在控制器中使用try ... catch的最佳方法是什么?或者我应该在控制器中使用try ... catch?
我想覆盖HandleErrorAttribute一个名为类似的新版本HandleErrorsWithLogging.本质上,我希望它将未处理的异常记录到我的日志文件中,然后继续执行典型的" 重定向到〜/共享/错误 "功能HandleError.
我已经HandleError在我的所有行动中添加了global.asax
这是最好的方法还是有一些更简单的方法来获取对日志记录的未处理异常的访问权限?我还有关于Error视图本身的Ajax调用.
我已经阅读了很多文章和几篇文章(包括这里的stackoverflow),但不知道我做错了什么.
这是我的代码:
的Global.asax.cs
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)
ErrorControler.cs
public class ErrorController : Controller
{
public ActionResult Error404()
{
return View();
}
public ActionResult Error500()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
Web.config文件
<customErrors mode="On" defaultRedirect="~/Error/Error500">
<error statusCode="404" redirect="~/Error/Error404"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
MyController.cs
public ActionResult Index()
{
using (var db = new DataContext())
{
int a = 2, b = 0;
var r = a / b;
return View(r);
}
}
Run Code Online (Sandbox Code Playgroud)
Error500.cshtml
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Erro";
}
<h2>@ViewBag.Title</h2> …Run Code Online (Sandbox Code Playgroud) 我在我的MVC3 Razor项目的HomeController.cs中的try catch块中定义了一个方法.现在请告诉我如何在我的视图页面上显示此异常消息?
我有以下内容IHttpModule,我正在试图弄清楚如何从控制器为给定的绝对或相对URL执行操作.
public class CustomErrorHandlingModule : IHttpModule
{
#region Implementation of IHttpModule
public void Init(HttpApplication context)
{
context.Error += (sender, e) =>
OnError(new HttpContextWrapper(((HttpApplication)sender).Context));
}
public void Dispose()
{}
public void OnError(HttpContextBase context)
{
// Determine error resource to display, based on HttpStatus code, etc.
// For brevity, i'll hardcode it for this SO question.
const string errorPage = @"/Error/NotFound";
// Now somehow execute the correct controller for that route.
// Return the html response.
}
}
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
asp.net-mvc ×4
c# ×2
.net ×1
ajax ×1
c#-4.0 ×1
httpmodule ×1
javascript ×1
logging ×1
razor ×1
try-catch ×1