ASP.Net - 授权失败时如何显示“您未经授权”消息

时间:2013-09-26 17:04:30

标签: asp.net authorization roles

我的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>

这是“管理员”控制器页面:

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

如果登录的人在系统中但没有SuperUser角色,则返回到登录界面 - 我想要做的是,我希望用户区分出现的登录界面,因为用户尚未登录,屏幕显示,因为用户没有正确的角色。

实际上,我想要为未经授权的用户做的事情是显示一个显示消息的单独屏幕,然后让用户返回到应用程序的主屏幕。

2 个答案:

答案 0 :(得分: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
{

答案 1 :(得分: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!");
        }
    });
}
相关问题