.NETには、2つのAuthorizeAttribute
クラスがあります。 System.Web.Http
名前空間で定義されたもの:
namespace System.Web.Http
{
// Summary:
// Specifies the authorization filter that verifies the request's System.Security.Principal.IPrincipal.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : AuthorizationFilterAttribute
{
// Summary:
// Initializes a new instance of the System.Web.Http.AuthorizeAttribute class.
public AuthorizeAttribute();
// Summary:
// Gets or sets the authorized roles.
//
// Returns:
// The roles string.
public string Roles { get; set; }
//
// Summary:
// Gets a unique identifier for this attribute.
//
// Returns:
// A unique identifier for this attribute.
public override object TypeId { get; }
//
// Summary:
// Gets or sets the authorized users.
//
// Returns:
// The users string.
public string Users { get; set; }
// Summary:
// Processes requests that fail authorization.
//
// Parameters:
// actionContext:
// The context.
protected virtual void HandleUnauthorizedRequest(HttpActionContext actionContext);
//
// Summary:
// Indicates whether the specified control is authorized.
//
// Parameters:
// actionContext:
// The context.
//
// Returns:
// true if the control is authorized; otherwise, false.
protected virtual bool IsAuthorized(HttpActionContext actionContext);
//
// Summary:
// Calls when an action is being authorized.
//
// Parameters:
// actionContext:
// The context.
//
// Exceptions:
// System.ArgumentNullException:
// The context parameter is null.
public override void OnAuthorization(HttpActionContext actionContext);
}
}
System.Web.Mvc
名前空間で定義されたもう1つ:
namespace System.Web.Mvc
{
// Summary:
// Specifies that access to a controller or action method is restricted to users
// who meet the authorization requirement.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
// Summary:
// Initializes a new instance of the System.Web.Mvc.AuthorizeAttribute class.
public AuthorizeAttribute();
// Summary:
// Gets or sets the user roles that are authorized to access the controller
// or action method.
//
// Returns:
// The user roles that are authorized to access the controller or action method.
public string Roles { get; set; }
//
// Summary:
// Gets the unique identifier for this attribute.
//
// Returns:
// The unique identifier for this attribute.
public override object TypeId { get; }
//
// Summary:
// Gets or sets the users that are authorized to access the controller or action
// method.
//
// Returns:
// The users that are authorized to access the controller or action method.
public string Users { get; set; }
// Summary:
// When overridden, provides an entry point for custom authorization checks.
//
// Parameters:
// httpContext:
// The HTTP context, which encapsulates all HTTP-specific information about
// an individual HTTP request.
//
// Returns:
// true if the user is authorized; otherwise, false.
//
// Exceptions:
// System.ArgumentNullException:
// The httpContext parameter is null.
protected virtual bool AuthorizeCore(HttpContextBase httpContext);
//
// Summary:
// Processes HTTP requests that fail authorization.
//
// Parameters:
// filterContext:
// Encapsulates the information for using System.Web.Mvc.AuthorizeAttribute.
// The filterContext object contains the controller, HTTP context, request context,
// action result, and route data.
protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext);
//
// Summary:
// Called when a process requests authorization.
//
// Parameters:
// filterContext:
// The filter context, which encapsulates information for using System.Web.Mvc.AuthorizeAttribute.
//
// Exceptions:
// System.ArgumentNullException:
// The filterContext parameter is null.
public virtual void OnAuthorization(AuthorizationContext filterContext);
//
// Summary:
// Called when the caching module requests authorization.
//
// Parameters:
// httpContext:
// The HTTP context, which encapsulates all HTTP-specific information about
// an individual HTTP request.
//
// Returns:
// A reference to the validation status.
//
// Exceptions:
// System.ArgumentNullException:
// The httpContext parameter is null.
protected virtual HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext);
}
}
これら2つの主な違いは次のとおりです。
System.Web.Http
バージョンはWeb APIで使用できますSystem.Web.Mvc
バージョンはASP.NET MVCで使用できますHttp
バージョンがHttpActionContext
タイプを使用する場合、Mvc
バージョンはOnAuthorizationメソッドでAuthorizationContext
パラメータタイプを使用します。Http
のAuthorizeAttribute
バージョンのリクエストCookieにアクセスしたい。 Mvc
バージョンでは、次のように実装されます。
public class Foo : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("Bar");
}
}
HttpActionContext
を使用して同じようにできることを誰かが知っていますか?まったく可能ですか?それが不可能な場合-なぜそうなのか?
public class Foo : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var cookie = actionContext.Request.Headers.GetCookies("Bar").FirstOrDefault();
}
}
string sessionId = "";
CookieHeaderValue cookie = Request.Headers.GetCookies("bar").FirstOrDefault();
if (cookie != null)
{
sessionId = cookie["bar"].Value;
}
GetCookies はcookieのコレクションを返します[〜#〜] s [〜#〜]次に、Cookieを取得する必要があります必要。
public class Foo : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var cookies = actionContext.Request.Headers.GetCookies("Bar").FirstOrDefault();
var cookie = cookies["Bar"];
}
}