2

ActionFilterAttribute を作成しました

public class LoggingNHibernateSessionAttribute : ActionFilterAttribute

名前が示すように、フィルターの目的はログを記録することであり、ターゲット アクションの前と後にそれぞれトランザクションを開き、コミットします。

WebApi(myAPI) プロジェクト (MVC4) と WebApplication(myContent) があります。

myAPI の各 Api コントローラーは、この属性で装飾されています。

using myApp.Web.Common.Filters;

namespace myAPI.Web.Api.Controllers
{
    [LoggingNHibernateSession]
    public class CategoriesController : ApiController
    {

HTTP アクション (Get/Post) が ApiController 内で実行されると、ActionFilter が実行され、期待どおりに正常に動作します。

問題: WebApplication(myContent) では、これらのコントローラーも ActionFilter で装飾しました。

using myApp.Web.Common.Filters;

namespace myContent.Web.Content.Places.Controllers
{
    [LoggingNHibernateSession]
    public class PlacesController : Controller
    {

ただし、ここでは、コントローラー内でアクションが実行されると、ActionFilter は実行されません。

ActionFilter はSystem.Web.Http.Filtersに属します。

いくつかの投稿を読みましたが、System.Web.Mvc フィルターを使用すると書かれていました。そこで、ActionFilter をSystem.Web.Mvcからのものに変更しました 。それを切り替えると、ActionFilter は WebApi でも動作しなくなりました。

ここで何が間違っていますか?

4

1 に答える 1