首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC3 IAuthorisationfilter Ninject依赖项

ASP.NET MVC3 IAuthorisationfilter Ninject依赖项
EN

Stack Overflow用户
提问于 2011-04-12 12:27:40
回答 2查看 1.5K关注 0票数 4

目前,我正在尝试设置依赖项注入,并覆盖授权属性。我试着效仿一些例子,尽管我似乎总是会犯错误。

Global.asax

代码语言:javascript
复制
public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication
{
    private class MyModule : NinjectModule
    {
        public override void Load()
        {
            this.BindFilter<SageAdminAuthorizationFilter>(FilterScope.Controller, 0);
            Bind<IAuthentication>().To<CustomAuthenticationService>();
        }
    }

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

    protected override void OnApplicationStarted()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    protected override IKernel CreateKernel()
    {
        var modules = new INinjectModule[] {
        new MyModule()
    };
        var kernel = new StandardKernel(modules);

        return kernel;
    }
}

认证过滤器

代码语言:javascript
复制
public class CustomAuthenticationService : IAuthentication
{
    public void SignIn(string claimedIdentifier, bool createPersistentCookie)
    {
        //Write Sign in code here
        FormsAuthentication.SetAuthCookie(claimedIdentifier, createPersistentCookie);
    }

    public void SignOut()
    {
        FormsAuthentication.SignOut();
    }

    public bool Authorize(HttpContextBase httpContext)
    {
        //Check here if the user can administer the  admin
        return false;
    }
}

//The Authorization attribute on a controller
public class CustomAdminAuthorizationFilter : IAuthorizationFilter
{
    private readonly IAuthentication _authentication;

    public SageAdminAuthorizationFilter(IAuthentication authentication)
    {
        _authentication = authentication;
    }

    public void OnAuthorization(AuthorizationContext filterContext)
    {
        _authentication.Authorize(filterContext.HttpContext);
    }
}

我总是收到

序列不包含任何元素。

任何帮助都将不胜感激。

更新:我仍然收到相同的错误。

调用堆栈如下所示

'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.的定位源校验和:'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs‘文件MD5 {3d e3 7f 86 44 70 db 0 3c 6f e0 97 Fb1e 12 13}文件不存在。查看'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'...的脚本文档寻找'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.的项目在项目中找不到该文件。查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\crt\src\’.查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\mfc\.查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\atl\’.查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\atlmfc\include\’.活动解决方案的调试源文件设置指示调试器不会要求用户查找文件: c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs.。调试器无法找到源文件'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.。

我已经安装了Ninject和Ninject.MVC3从Nuget。虽然它正在试图查找要调试的文件,但它看起来是这样的。有没有人能告诉我为什么会发生这种事。

我也收到了这个错误。

System.Linq.Enumerable.Single(IEnumerable1 source) +320 Ninject.Web.Mvc.Bootstrapper.Initialize(Func1 :序列在c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\Bootstrapper.cs:67 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs:65中不包含元素InvalidOperationException createKernelCallback)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-12 12:45:36

应使用以下语法注册操作筛选器:

代码语言:javascript
复制
public override void Load()
{
    BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0);
    Bind<IAuthentication>().To<CustomAuthenticationService>();
}

你也可以apply the filter conditionally

备注:在您的问题中看不到与NinjectDependencyResolver类的任何关系。这已经内置在ninject.mvc3中了,您不应该手动编写它。

票数 2
EN

Stack Overflow用户

发布于 2011-04-28 16:21:17

http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/933f62dd-80e5-4ef3-9199-9e9abfefeadf

通过取消选中“要求源文件与原始版本完全匹配”旁边的复选框解决问题。

代码语言:javascript
复制
Tools --> Options --> Debugging --> General 

山达基教徒没有水果

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5635148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档