C# 编写同时适用于MVC和Web API请求的过滤器

C# 编写同时适用于MVC和Web API请求的过滤器,c#,asp.net,.net,asp.net-mvc-4,asp.net-web-api,C#,Asp.net,.net,Asp.net Mvc 4,Asp.net Web Api,我的ASP.NET应用程序既使用ASP.NET MVC为网页提供服务,也使用ASP.NET web API为源自这些网页的AJAX请求提供服务 我想做一些事情,比如检查请求是否经过身份验证,在HttpContext中设置适当的事情,不管我处理的是哪种请求 我现在要写两门课 1) 继承Mvc请求的-System.Web.Mvc.ActionFilterAttribute的一个 2) 继承Web API请求的-System.Web.Http.Filters.ActionFilterAttribute

我的ASP.NET应用程序既使用ASP.NET MVC为网页提供服务,也使用ASP.NET web API为源自这些网页的AJAX请求提供服务

我想做一些事情,比如检查请求是否经过身份验证,在HttpContext中设置适当的事情,不管我处理的是哪种请求

我现在要写两门课

1) 继承Mvc请求的-System.Web.Mvc.ActionFilterAttribute的一个 2) 继承Web API请求的-System.Web.Http.Filters.ActionFilterAttribute的


有没有一种方法可以将针对MVC和API请求运行的过滤器应用到网站?或者,对于这种用例,通过旧的http模块是推荐的方式吗

我看不到将MVC和Web API中的身份验证/授权过滤器放在单个过滤器中的好方法,因为它们的行为非常不同。对于MVC请求,当用户授权失败时,您希望将他们重定向到另一个页面,以作为另一个用户登录,或者让他们知道他们无权访问该页面。对于用户授权失败时的Web API请求,您希望发送一个指示授权失败的HTTP状态代码,并让客户端处理它。他们甚至可以在行为和功能上更加偏离主题,例如,如果您愿意的话。这仅适用于Web API请求,而不是MVC请求。我认为有两个不同的过滤器是一种更干净的分离

当然,我认为身份验证是一个糟糕的例子。假设我们希望根据请求在HttpContext中设置某些内容,我希望对MVC和Web API请求都这样做。