でそれを渡しますACTIONNAME、コントローラ名とAREANAMEを取得し、私は以下のようなカスタムAuthorizationFilterを使用するのActionFilter属性
public class ActionAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {
if(!httpContext.User.Identity.IsAuthenticated)
return false;
if(IsUserExcluded())
return false;
else
return IsRoleAuthorize(httpContext);
}
}
は私が持っている各アクションの先頭にこのフィルタを使用し、チェックが許可されているため、アクション名、コントローラー名、エリア名が必要です。だから、のようなAuthorizeCore()
メソッドでこの名前を取得する方法はありますか?
[ActionAuthorize(actionName=Action, controller=ControllerName, area=AreaName)]
public ActionResult Index() {
return View();
}
いずれかが任意のアイデアを持っています:答えは、私は、この名前を取得し、属性のためにそれを渡すことができますどのようにしてNOの場合には、明らかに私は実際には、コントローラでViewContext.RouteData.Values["Controller"]
のようなもの、手でそれぞれの名前を追加したくありませんそれについて?
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
var rd = httpContext.Request.RequestContext.RouteData;
string currentAction = rd.GetRequiredString("action");
string currentController = rd.GetRequiredString("controller");
string currentArea = rd.Values["area"] as string;
...
}
「あなたはRouteDataからそれらを取得することができ、」地域を取得していきます良い答え。 **今は**それは編集された、私は元に戻す。 – gdoron
これはASP.NET MVC 4の場合のみ可能ですが、この領域はrd.DataTokens ["area"]にあります。 –
行var rd = httpContext.Request.RequestContext.RouteDataを変更する必要があります。 〜 var rd = HttpContext.Current.Request.RequestContext.RouteData;パラメータよりも標準のものを使用するほうがよいでしょう:) –