asp.net-mvc-3 - ASP.NET Web API Ninject 构造函数注入(inject)自定义过滤器和属性

标签 asp.net-mvc-3 ninject asp.net-web-api

我正在努力让自定义属性/过滤器与 ninject、ASP.NET Web API 上的构造函数注入(inject)一起使用。

这里有一些片段可以提供一些背景信息......

//controller
[ApiAuthorise]
public IEnumerable<Thing> Get()

// Attribute definition with no body
public class ApiAuthoriseAttribute : FilterAttribute {}

// Custom Filter definition
public class ApiAuthoriseFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    { throw new NotImplementedException(); }
}

//Ninject module for my API authorisation 
public class ApiAuthoriseModule : NinjectModule
{
    public override void Load()
    {

        this.BindFilter<ApiAuthoriseFilter>(FilterScope.Action, 0)
            .WhenActionMethodHas<ApiAuthoriseAttribute>()
}}

//The registerServices(IKernel kernel) method in NinjectMVC3.cs
kernel.Load(new ApiAuthoriseModule());

这实际上是我关于此过滤器和属性的所有代码。 据我了解,我不必将过滤器显式添加到全局过滤器集合中,因为 ninject 会处理这一点,这是正确的吗?

如果我在属性中放置一个构造函数并从其中抛出异常,我可以看到该属性正在触发。

我怀疑我在 Ninject 方面做错了,但是在花了一个下午阅读了其他与我的似乎相同的示例后,我知道寻求帮助:)

TIA

最佳答案

您需要在 Web API 中使用不同的类,而不是标准的 System.Web.Mvc.FilterAttributeSystem.Web.Mvc.IAuthorizationFilter普通 Controller 中使用的:

public class ApiAuthoriseAttribute : System.Web.Http.Filters.FilterAttribute 
{ 

}

public class ApiAuthoriseFilter : System.Web.Http.Filters.IAuthorizationFilter
{
    public System.Threading.Tasks.Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(System.Web.Http.Controllers.HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken, Func<System.Threading.Tasks.Task<HttpResponseMessage>> continuation)
    {
        throw new NotImplementedException();
    }

    public bool AllowMultiple
    {
        get { return false; }
    }
}

那么您显然必须修改 Ninject 和过滤器绑定(bind)语法( BindFilter 扩展方法)才能注册这个新类。或者等待Ninject.MVC4其中将包含此功能。

关于asp.net-mvc-3 - ASP.NET Web API Ninject 构造函数注入(inject)自定义过滤器和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500539/

相关文章:

asp.net-mvc-3 - ASP.NET MVC3 URL 参数解析为空

asp.net-mvc - Razor 嵌套 WebGrid

c# - ASP.NET MVC + SSRS + 嵌入式报表

c# - 使用 Ninject 和 Web API 2.1 注入(inject) API Controller 时出现 InvalidOperationException

c# - Ninject - 注册接口(interface)的所有实现

c# - 如何使用 .net webapi 保存对象

asp.net-web-api - Skype for Business UCWA 和 Web API 与 Office365

asp.net-mvc - 不允许子操作执行重定向操作 - MVC

ioc-container - Ninject:为 AoP 代理类型时可以使用注入(inject)构造函数吗?

Objective-C iOS NSURLConnection statusCode 400 没有正文返回