2013-09-26 87 views
0

我的ASP.Net應用程序處理角色的授權很好,但是當有人到達未經授權的頁面時,他會被踢回到登錄頁面而無需任何形式的警告。ASP.Net - 當授權失敗時如何顯示「您沒有授權」消息

有沒有辦法將消息傳遞到默認登錄頁面?或者,有沒有辦法讓授權失敗重定向到不是默認登錄頁面的頁面(同時在第一次需要授權時保持默認頁面)?

我覺得你們中的一些人誤解了我所擁有的東西。 這裏是我的login.aspx:

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web.Security" %> 

<script runat="server"> 
void Logon_Click(object sender, EventArgs e) 
{ 
    if (Membership.ValidateUser(Username.Text, Password.Text)) 
    { 
     FormsAuthentication.RedirectFromLoginPage(Username.Text, false); 
    } 
    else 
    { 
     Msg.Text = "Your user name or password is incorrect"; 
    } 
} 
</script> 

<html> 
<head id="Head1" runat="server"> 
    <title>Login Screen</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div style="text-align:center;">  
    <h3>You must be logged in to use this application</h3> 
    <table> 
     <tr> 
     <td> 
      User Name:</td> 
     <td> 
      <asp:TextBox ID="Username" runat="server" /></td> 
     <td> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
      ControlToValidate="Username" 
      Display="Dynamic" 
      ErrorMessage="User Name needs to be filled in" 
      runat="server" /> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      Password:</td> 
     <td> 
      <asp:TextBox ID="Password" TextMode="Password" 
      runat="server" /> 
     </td> 
     <td> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
      ControlToValidate="Password" 
      ErrorMessage="Password needs to be filled in" 
      runat="server" /> 
     </td> 
     </tr> 
    </table> 
    <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On" 
     runat="server" /> 
    <p> 
     <asp:Label ID="Msg" ForeColor="red" runat="server" /> 
    </p> 
    </div> 
    </form> 
</body> 
</html> 

這裏是「admin」的控制器頁:

namespace MyApp.Controllers 
{ 
    public class AdminController : Controller 
    { 
     [Authorize(Roles="SuperUser")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

如果誰登錄在系統中,但不具有超級用戶角色的人,它返回到登錄屏幕 - 我想要做的是,我想讓用戶區分出現的登錄屏幕,因爲用戶尚未登錄,屏幕出現,因爲用戶沒有正確的角色。

其實,我想想要做一個未經授權的用戶是顯示一個單獨的屏幕,顯示一條消息,然後讓用戶返回到應用程序的主屏幕。

+0

您可以檢查返回URL參數的基礎上,你可能會顯示在登錄屏幕 –

+0

消息事實證明,我所要做的是[本](http://stackoverflow.com/questions/7447705/asp-net-redirect-to-error-page-if-roles-authorization-fails)。 –

回答

0

可以使用ContentResult類型返回一個普通的字符串:

In MVC, how do I return a string result?

if bAuthorized 
{ 
    return Content("Unauthorized."); 
} 

假設你的函數如下所示:

function isAuthorized() { 
    $.ajax({ 
     url: '/Home/isAuthorized', 
     type: "POST", 
     data: "some data", 
     success: function (ret) { 
      $("#displayresult").html(ret); 
     }, 
     error: function (ret) { 
      $("#cdisplayresult").text("Something went wrong!"); 
     } 
    }); 
} 
2

創建一個從AuthorizeAttribute派生的類和重寫方法:HandleUnauthorizedRequest

using System.Web.Mvc; 
using System.Web.UI.WebControls; 

namespace MvcAttributes.Infrastructure.customAttributes 
{ 
    public class MyAuthorizeAttribute : AuthorizeAttribute 
    { 
     protected override void HandleUnauthorizedRequest(AuthorizationContext context) 
     { 
      // redirect to your Error page 
      context.Result =new RedirectResult("/UnauthorizedRequest.html"); 
      // if you want to redirect to some action, use: 
      // new RedirectResult("/UnAuthorizedUsers/ErrorDetails"); 

     } 
    } 
} 

,並如下圖所示適用MyAuthorizeAttribute

[MyAuthorizeAttribute] 
public class ProductController :Controller 
{