0

このhttp://www.asp.net/web-forms/tutorials/security/membership/user-based-authorization-vbのような別のページにユーザーをリダイレクトできることを知りましたが、もっと良い方法があるかどうか疑問に思っています? また、別のビューにリダイレクトする代わりに、エラー メッセージを送信するにはどうすればよいですか?

たとえば、ここに私のコードがあります:

<Authorize(Roles:="Administrator")>
Public Class CompanyController

ユーザーがログインしたが正しい資格情報を持っていない場合、これにエラー メッセージのようなものを追加できますか? ViewBag.Error にエラーを設定できますか? ご協力いただきありがとうございます。

4

2 に答える 2

2

Authorize 属性のポイントは、ユーザーが許可されていない場合にコントローラー アクションへのアクセスを防止することです。アクションはまったく実行されず、デフォルトで LogOn アクションにリダイレクトされます。元のアクションが実行されなかったという事実は、ビューがレンダリングされなかったことを意味します。

LogOn アクションにリダイレクトされたくないが、レンダリングされるカスタム ビューを作成する場合は、カスタム Authorize 属性を記述して、HandleUnauthorizedRequestメソッドをオーバーライドできます。

Public Class MyAuthorizeAttribute
    Inherits AuthorizeAttribute

    Protected Overrides Sub HandleUnauthorizedRequest(filterContext As AuthorizationContext)
        Dim result = New ViewResult()
        result.ViewName = "Forbidden"
        result.ViewBag.ErrorMessage = "oops, you are not allowed"
        filterContext.Result = result
End Sub
End Class

~/Views/Shared/Forbidden.vbhtml次に、レンダリングされるビューを定義します。

<h3>@ViewBag.ErrorMessage</h3>

最後に、このカスタム属性でコントローラーを装飾します。

<MyAuthorize(Roles:="Administrator")>
Public Class CompanyController
于 2012-07-28T06:31:00.833 に答える
0

いつでも MVC で独自の承認フィルターを作成し、必要なことは何でも行うことができます。

IAuthorizationFilterを実装するクラスを作成する必要があります。別のアクションにリダイレクトしたい場合は、この承認フィルターで ViewBag.Error に何かを追加することができます。ただし、ユーザーが認証する方法を提供しない場合、そのメッセージがどれほど役立つかはわかりません。

于 2012-07-27T21:26:44.373 に答える