0

現在、ASP.NET MVC 5 (C#) で試験プロジェクトに取り組んでいます。

私の問題はコントローラーの 1 つです。これは、authorize roles 属性に大きく依存して、人々が特定の役割を持っていることを確認し、それによってコントローラーのさまざまな機能にアクセスできるようにします。コンストラクターを介して依存性注入を使用するまでは、正常に機能していました... mvc3 に ninject をインストールし、バインドをセットアップし、コンストラクターがコントローラーでインターフェイスを受け入れるようにした後のようです。すべての承認タグを無視するだけですか?新しいコンストラクターを除いて、コントローラーに違いは何もないため、構文エラーではないことはわかっています。ただし、これはアカウント コントローラーには影響しないように思われるため、Ninject が問題を起こしていると推測する必要があります。

ninject 用に設定したので、コントローラーですべてのメソッドを実行して、誰もがやりたいことをすべて実行できます。

誰でもこの問題とそれを修正するための手順について助けたり知ったりできますか?

私は月曜日にプロジェクトを提出しなければならないので、この問題について比較的迅速に教えてくれるグルを期待していました。Google 検索では、Ninject が属性で機能しないことがわかります。それは本当ですか? もしそうなら、私はかなりめちゃくちゃです。

基本的に、これを NinjectWebCommon の "RegisterServices" メソッドに追加しました。

kernel.Bind<IChildRepository>().To<ChildRepository>();

(放課後などの子供を見守る機関のサイトを作っています。childcontrollerは、システムで作成された「子供」の管理を制御します)。

private readonly IChildRepository _childRepository;

public ChildController(IChildRepository childRepository)
{
    _childRepository = childRepository;
}

これは私のリポジトリクラスです:

public class ChildRepository : IChildRepository
    {
        ChildContext context = new ChildContext();


    public IQueryable<Child> All
    {
        get { return context.Children; }
    }

    public IQueryable<Child> AllIncluding(params Expression<Func<Child, object>>[]     includeProperties)
    {
        IQueryable<Child> query = context.Children;
        foreach (var includeProperty in includeProperties)
        {
            query = query.Include(includeProperty);
        }
        return query;
    }

    public Child Find(int id)
    {
        return context.Children.Find(id);
    }

    public void InsertOrUpdate(Child child)
    {
        if (child.ChildId == default(int))
        {
            context.Children.Add(child);
        }
        else
        {
            context.Entry(child).State = System.Data.Entity.EntityState.Modified;
        }
    }

    public void Delete(int id)
    {
        var child = context.Children.Find(id);
        context.Children.Remove(child);
    }

    public void Save()
    {
        context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }

}

そして私のレポインターフェース:

public interface IChildRepository : IDisposable
    {
        IQueryable<Child> All { get; }
        IQueryable<Child> AllIncluding(params Expression<Func<Child, object>>[] includeProperties);
        Child Find(int id);
        void InsertOrUpdate(Child child);
        void Delete(int id);
        void Save();
    }

これは、コントローラー メソッドのインデックス メソッドで、authorize の使用方法を示しています。

    [Authorize(Roles = "Admin, CanEdit")]
    public ActionResult Index()
    {
        return View(_childRepository.All.ToList());
    }

それは今どのように機能しますか?システムにログインしなくても、childcontroller ビューと index 以外のすべてのメソッドにアクセスできますか?

4

1 に答える 1

1

グーグルで問題の解決策を見つけました。どうやらこの行を registerservices メソッドに追加すると、問題全体が解決するようです。

kernel.Bind<IFilterProvider>().To<FilterAttributeFilterProvider>();

私が今愛するこの男からそれを手に入れました :

私は自分で質問に答えると思ったので、他の人が同じ問題に遭遇した場合、彼らはそれを機能させることができます!

于 2014-05-22T10:51:25.010 に答える