C# 如何在.NET';什么是MVC?

C# 如何在.NET';什么是MVC?,c#,.net,model-view-controller,exception,filter,C#,.net,Model View Controller,Exception,Filter,我正在开发的应用程序上的一个过滤器检查用户是否拥有他们试图更改的项目。该操作由[RequiresOwnership]属性修饰,在属性逻辑中,我检查用户是否拥有该项目,如果他们没有,我抛出UnauthorizedAccessException 我的问题是:我在哪里可以捕捉到这种异常?理想情况下,我希望将用户重定向到一个页面,解释为什么他们试图做的事情不被允许,而不是仅仅显示一个异常页面。我不认为我会捕获由属性修饰的操作中的异常,所以在.NETMVC模型中,应用程序是否有一些基本部分可以处理向上抛出

我正在开发的应用程序上的一个过滤器检查用户是否拥有他们试图更改的项目。该操作由
[RequiresOwnership]
属性修饰,在属性逻辑中,我检查用户是否拥有该项目,如果他们没有,我抛出
UnauthorizedAccessException

我的问题是:我在哪里可以捕捉到这种异常?理想情况下,我希望将用户重定向到一个页面,解释为什么他们试图做的事情不被允许,而不是仅仅显示一个异常页面。我不认为我会捕获由属性修饰的操作中的异常,所以在.NETMVC模型中,应用程序是否有一些基本部分可以处理向上抛出的异常


编辑:我意识到我可以通过过滤器本身重定向到一个页面,但这对我来说似乎有点不正常。通过属性抛出异常会很好,并且有一个可以捕获和处理异常的标准位置。

我认为您需要的是控制器上的[HandleError]属性,它采用错误处理程序视图的可选路径。默认值为~/Views/Shared/Error.aspx;您可以在那里为特定的异常添加额外的支持。

我遇到了这个问题,我解决这个问题的方法是将异常添加到FilterContext的TempData集合中,而不是抛出它。然后,您可以在操作方法中检查它,重新抛出它并适当地处理它:

在属性中:

if (/*some error condition*/)
   filterContext.Controller.TempData["Err"] = new Exception("An error");
在行动方法中:

var e = TempData["Err"] as Exception;
if (e != null)
    throw e;
这是一个不太理想的解决方案,但正如您所提到的,没有从属性捕获异常的有用位置。

“没有从属性捕获异常的有用位置。”@GalacticCowboy的答案有什么不对?