一部のユーザーがロールに属しているアプリケーションを使用していますが、実際には URL 内の特定のデータにアクセスできない場合があります。たとえば、次の URL はすべてのユーザーに公開されています
/Library/GetFile/1
ただし、一部のユーザーは file1 にアクセスできない可能性がありますが、Authorize 属性を使用してそれを検出することはできません。代わりに、これらのユーザーを無許可またはアクセス拒否のページにリダイレクトしたいと考えています。フォーム認証を使用しており、構成は次のように設定されています
<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>
私のカスタムエラーブロックはこのようなものです
<customErrors mode="On" defaultRedirect="Error" redirectMode="ResponseRewrite" >
<error statusCode="401" redirect="Unauthorized"/>
</customErrors>
ユーザーがアクセス権を持っていない場合、HttpUnauthorizedResult を返そうとしていますが、ユーザーが既に認証されているため、ここでは無効なログイン ページにリダイレクトされます。
HttpUnauthorizedResult が HTTP 応答コードを 401 に設定しているように見えます。フォーム認証がハイジャックされ、ユーザーがログイン ページに送られます。
RegisterGlobalFiltersを
filters.Add(new HandleErrorAttribute
{
ExceptionType = typeof(UnauthorizedAccessException),
View = "Unauthorized",
Order = 3
});
UnauthorizedAccessException をカスタム Exception に変更すると、リダイレクトが機能し、今のところそれが私が行ったことです。