gpt4 book ai didi

c# - Response.Redirect 失败但随后可以在刷新 IIS Express VS2013 上工作

转载 作者:行者123 更新时间:2023-11-30 23:07:17 24 4
gpt4 key购买 nike

我在 Visual Studio 2013 中有一个 ASP.NET 项目,在 IIExpress(版本 8.08418.0)中本地运行以进行测试。

主页 (adminDefault.aspx) 将用户重定向到 Login.aspx 以进行身份​​验证(这是基于作为 url 变量传递给 adminDefault.aspx 的用户 ID 静默完成的)。登录页面在身份验证成功后将其发送回 adminDefault.aspx。 Default 然后将数据加载到 Gridview 中。

整个过程大约需要 15 秒。

当我从 Visual Studio 2013 运行它时,我在大约 4 秒内收到错误“无法显示此页面”。但是,如果我手动点击刷新,工作一段时间后,一切都会好起来的。

Showing Failure

在我的代码中,怀疑超时,我隐式设置了足够长的时间来运行所有内容:

 if (!this.IsPostBack)
{

Session.Timeout = 120; // seconds before timeout
try
{
// OnUser should have been set from Login.asp. If it is null, send to Login
MembershipUser onUser = Membership.GetUser();
if (onUser == null)
{
Response.Redirect("/login.aspx", true);
}
else
{
String currentUserName = Membership.GetUser().UserName;
userRoles = Roles.GetRolesForUser(Membership.GetUser().UserName);
}
}

即使 Session.Timeout 被忽略,默认值为 20 秒,所以我希望它无论如何都能工作。

所以:1)为什么第一次运行失败?2)有什么办法可以预防吗?如果失败,我可以捕获找不到的页面并自动刷新吗?

编辑:这与 Login.aspx 的往返行程有关。如果我删除 Response.Redirect("/login.aspx", true);然后这按预期工作。问题是,我需要 Login.aspx 进行验证。任何人都知道为什么登录和返回的旅程不起作用......然后在刷新时呢?

当我尝试在 Chrome 中运行它时,我没有得到那么远。 Chrome 向我展示了这个:

enter image description here

点击这里只是循环片刻然后返回到屏幕。

在这种情况下,IE 上的开发人员工具没有帮助(至少我可以看到)。当我在调试器中运行我的项目时,它会启动一个新的 IE session 。在我打开开发者工具并按下“播放”来记录事件之前, session 已经给我“无法显示页面”错误。当然,我可以在工具中点击“播放”然后刷新,但是当然一切都可以正常运行。刷新使一切正常运行。我需要在那之前发现它失败的原因。

编辑:这是 Login.aspx 和 Web.Security 代码。它不是我写的,但它看起来像样板:

  protected void Page_Load(object sender, EventArgs e)
{
string userName = "";
bool authenticated = FormsAuthentication.Authenticate(ref userName);
if (authenticated)
{
FormsAuthentication.RedirectFromLoginPage(userName, false);
}
}

验证码如下所示:

        /// <summary>
/// Validates a user based on the session id found in the ReturnURL against credentials stored in the ASP.NET membership.
/// </summary>
/// <param name="userName">The user name.</param>
/// <returns>true if the user name and password are valid; otherwise, false.</returns>
public static bool Authenticate(ref string userName)
{
bool Authenticated = Authenticate(ref userName, GetSessionId());
return Authenticated;
}

/// <summary>
/// Redirects an authenticated user back to the originally requested URL or the default URL using the specified cookie path for the forms-authentication cookie.
/// </summary>
/// <param name="userName">The authenticated user name. </param>
/// <param name="createPersistentCookie">true to create a durable cookie (one that is saved across browser sessions); otherwise, false. </param>
/// <param name="strCookiePath">The cookie path for the forms-authentication ticket. </param>
public static void RedirectFromLoginPage(string userName, bool createPersistentCookie, string strCookiePath)
{
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false, strCookiePath);

// Redirect back to request page.
HttpContext.Current.Response.Redirect(GetRedirectUrl());
}

最佳答案

我认为在您最初的 if 语句中,您假设每个人都已登录或未登录。但未登录的用户和访问者也可以是匿名的(?)。您要做的是保护此 admin.Default 页面并仅允许授权用户。目前,如果用户 = null 或获得角色,您的 2 个条件是将用户发送回 login.aspx 页面(他们当前所在的页面)。身份验证是关于了解用户是谁,而授权是关于对资源的访问。您只希望授权用户访问该资源。

我会将 admin.Default.aspx、admin.Default.cs 和 admin.Default.designer.cs 放在它们自己的名为 AdminSecure 的文件夹中。然后将它们添加到该文件夹​​中后,右键单击并添加一个 Web.config 文件。在该 Web.config 中,您需要做的是拒绝匿名用户。因此,当他们尝试访问该 AdminDefault 页面时,他们会自动被重定向。

//拒绝未登录的用户? ==匿名

<xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>


//this can allow particular users
<allow users="User1@mail.com"/>

//deny everyone but one user:
<allow users="User1@mail.com"/>
<deny users="*"/>

注释掉您当前的代码,希望这对您有所帮助。

关于c# - Response.Redirect 失败但随后可以在刷新 IIS Express VS2013 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com