在response.redirect之前调用javascript

时间:2013-06-13 12:34:46

标签: c# asp.net

我正在尝试限制未经授权的用户访问Utilities.aspx页面并将其重定向到Default.aspx页面。

if (authorizedUser.ToLower() != "admin")
{
    if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
    {
        ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "<script>alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.')</script>", true);
        Response.Redirect("Default.aspx");
    }
}

但是,虽然重定向工作正常,但alert未显示在页面上。搜索此问题告诉我,Response.Redirect在完全呈现客户端代码之前完成其操作。

如何在alert之前显示Response.Redirect


我还在Page_Load的{​​{1}}中尝试了这两种方法,两种方法都不起作用。如果设置了某个会话,则显示警报。

Default.aspx

8 个答案:

答案 0 :(得分:3)

你做不到。

重定向是HTTP功能;执行重定向会完全跳过您的页面。

相反,您可以使用更多Javascript在警报后执行客户端重定向 具体来说,设置location.href

答案 1 :(得分:3)

Response.Redirect正在设置Location标题,浏览器在看到页面上的任何内容之前会看到并运行该标题。如果您希望页面实际执行,则必须先让它们进入页面,而不是仅仅重定向它们。

示例:

客户要求:

GET /Utilities.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*

服务器响应:

HTTP 300 OK
Location: /SomeNewPage.aspx      <-- Browser see this and goes
Content-Length: 12345

<html>                           <-- ignores from here down
  ...
  <script>alert('You\'re being redirected');</script>
  ...
</html>

客户新请求:

GET /SomeNewPage.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*
...

答案 2 :(得分:3)

您无法使用HTTP重定向+ javascript。如果你想在重定向之前显示警告信息,你需要使用100%的javascript解决方案,产生一个很大的安全漏洞,很容易导致对该页面的未经授权的访问。

我会说你能做的最好就是在目标页面上显示描述性消息。您可以为此发送查询字符串参数。

答案 3 :(得分:1)

我和@ClaudioRedi在一起。唯一的方法是通过JavaScript,以这种方式:

  • 即使启用了JavaScript,也可能被浏览器屏蔽;
  • 肯定会打开一个安全漏洞。

我的建议是,您在加载着陆页后会显示该提醒。

答案 4 :(得分:0)

尝试使用

ClientScript.RegisterStartupScript(Page.GetType(), "", script,true);

this.GetType() 

但是

Page.GetType()

答案 5 :(得分:0)

而不是重定向,您可以尝试这样: -

 System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<script language='javascript'>");
                sb.Append("alert('hello');window.location.href=\"page2.aspx\"");
                sb.Append("</script>");

 ClientScript.RegisterStartupScript(typeof(Page), "anything", sb.ToString(), true);

答案 6 :(得分:0)

您需要将客户端重定向到另一个页面。

if (authorizedUser.ToLower() != "admin")
    {
        if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
        {
    ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.'); window.location.href = 'Default.aspx';", true);

       }
    }

答案 7 :(得分:0)

试试这个 在警报添加后的javascript函数中

top.location='default.aspx';

现在您的代码就像

一样
if (authorizedUser.ToLower() != "admin")
{
    if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
    {
        ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "<script>alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');top.location='Default.aspx';</script>", true);

    }
}