Yos*_*Kim 1 asp.net-mvc basic-authentication asp.net-mvc-5
我有一个ASP MVC 5应用程序,我无法使自定义身份验证筛选器工作.
我在"CustomFilters"文件夹中创建了一个自定义身份验证过滤器,如下所示:
public class CustomBasicAuthAttribute : ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext context)
{
// does not fire... :(
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext context)
{
// does not fire... :(
}
}
Run Code Online (Sandbox Code Playgroud)
在我的ProductController中,我装饰了以下方法之一:
public class ProductsController : ApiController
{
[CustomBasicAuth]
[HttpGet]
[Route("clients/{id}/products")]
public IEnumerable<Products> GetByClientId(int id)
{
return new List<Products>();
}
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,CustomBasicAuth类中的OnAuthentication方法永远不会触发.我试图装饰整个控制器,并尝试全局加载它,但没有一个工作.
我阅读并关注了大量有关此问题的在线文章,看起来这应该可行.
任何帮助将不胜感激.
这里的问题是你正在为你的控制器类型实现错误的IAuthenticationFilter.您的控制器类继承自ApiController,因此这似乎是一个Web API项目.要为Web API实现自定义身份验证,CustomBasicAuthAttribute需要实现System.Web.Http.Filters.IAuthenticationFilter接口.其中的方法是AuthenticateAsync和ChallengeAsync.
显示的CustomBasicAuthAttribute实现清楚地继承自System.Web.Mvc.Filters.IAuthenticationFilter,因为它使用的是OnAuthentication和OnAuthenticationChallenge.放置在标准MVC控制器中的操作时,该属性将正确触发,而不是从APIController继承的属性.
| 归档时间: |
|
| 查看次数: |
1604 次 |
| 最近记录: |