カスタム メンバーシップ プロバイダーを使用する ASP.NET MVC3 アプリケーションがあります。
次のように、web.config で loginUrl を指定しています。
<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/>
ユーザーがアクセス権を持っていないページにアクセスしたときに、このリクエストをどのようにインターセプトして、この URL に何かを追加できるのか疑問に思いました。
カスタム メンバーシップ プロバイダーを使用する ASP.NET MVC3 アプリケーションがあります。
次のように、web.config で loginUrl を指定しています。
<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/>
ユーザーがアクセス権を持っていないページにアクセスしたときに、このリクエストをどのようにインターセプトして、この URL に何かを追加できるのか疑問に思いました。
SSO と呼ばれるコントローラーと LogOn と呼ばれるアクション メソッドがあると仮定すると、AuthorizeAttribute を拡張するだけでよいと思います。
public class AppendingAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
var url = new UrlHelper(context.RequestContext);
var logonUrl = url.Action("LogOn", "SSO", new {appendedQueryStringParameter = "somevalue"});
filterContext.Result = new RedirectResult(logonUrl);
}
}
この属性で承認が必要なコントローラー/アクション メソッドに注釈を付けるだけで、次のような URL にリダイレクトする必要があります。
/SSO/LogOn?appendedQueryStringParameter=何らかの値