こんにちは、あるビューから別のビューにリダイレクトする方法をお聞きしたいと思います。これが私の見解です
@model IEnumerable<test.Models.contents>
@using test
@if(Request.IsAuthenticated) {
<text>Welcome<strong>@User.Identity.Name</strong>
</text>
}
else
{
???
}
こんにちは、あるビューから別のビューにリダイレクトする方法をお聞きしたいと思います。これが私の見解です
@model IEnumerable<test.Models.contents>
@using test
@if(Request.IsAuthenticated) {
<text>Welcome<strong>@User.Identity.Name</strong>
</text>
}
else
{
???
}
ビュー内でリダイレクトを行わないでください。それはその責任ではありません。ビューの役割は、コントローラー アクションから渡されたデータをビュー モデルの形式で表示することです。
このビューをレンダリングしているコントローラー アクション内でこのリダイレクトを行います。たとえば、[Authorize]
属性でそれを飾ることができます。このようにして、ユーザーが承認されていない場合、web.config で指定した loginUrl にリダイレクトされます。
[Authorize]
public ActionResult SomeAction()
{
return View();
}
また、特定のビューにリダイレクトする場合は、カスタムの Authorize 属性を記述し、HandleUnauthorizedRequest
メソッドをオーバーライドして、ユーザーが認証されていない場合にリダイレクトするコントローラーとアクションを指定するだけです。
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var values = new RouteValueDictionary(new
{
controller = "SomeController",
action = "NotAuthorized"
});
filterContext.Result = new RedirectToRouteResult(values);
}
}
そしてそれであなたのアクションを飾ります:
[MyAuthorize]
public ActionResult SomeAction()
{
return View();
}
対応するビュー内では、テストを実行する必要はありません。このビューをレンダリングするところまで到達した場合、ユーザーが認証され、直接歓迎できることが保証されます。
@model IEnumerable<test.Models.contents>
@using test
Welcome <strong>@User.Identity.Name</strong>