0

私のコントローラーのいくつかには、共通のアクションを実装する基本クラスがあります。


- BaseAccountController にはログイン アクションがあります - PublicAccountController は
BaseAccountController から継承し、さらにアクションを実装します
- CorporateAccountController は BaseAccountController から継承し、さらにアクションを実装します

これにより、次のルートが提供されます。
- BaseAccount/Login
- PublicAccount/Login
- CorporateAccount/Login

これは望ましくないため、ルート BaseAccount/Login を削除する標準的な方法は何ですか。コントローラーの属性を望んでいます:)

4

2 に答える 2

5

Base コントローラーに次のカスタム属性を使用できます。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class ClosedAttribute : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       filterContext.Result = new HttpStatusCodeResult(404);
   }
}

Base コントローラーのルート (BaseAccount/Login) に対して 404 を受け取ります。ただし、Inherited プロパティが false であることを確認してください (例のように)。

使用例:

[Closed]
public class BaseAccountController : Controller
{
    ...
}

ここでカスタムアクションフィルターの詳細を(必要に応じて)読むことができます - http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

于 2012-08-07T02:19:17.130 に答える
0

にログイン アクションしかない場合は、BaseAccountControllerとしてマークできますabstract

于 2012-08-07T05:46:52.520 に答える