【问题标题】:Postback Fails On Default Document默认文档回发失败
【发布时间】:2014-12-05 16:56:11
【问题描述】:

所以我用 ASP.NET (C#) 创建了一个 Web 应用程序(不是网站),它在 VS13 环境中编译得很好。但是当我在 IIS 上发布它时,默认文档的回发失败。默认文档称为 LoginPage.aspx。只要我点击<asp:Button> 运行我的代码,它所做的就是刷新页面。这个项目暂时发布在我本地的127.0.0.1 IP地址上。

我知道这是一个记录在案的问题,但我尝试了许多解决方案,但没有找到解决方案。我尝试过的一些解决方案:

  • 使用最少的代码创建一个全新的 Web 应用程序以尝试访问任何回发但没有成功。
  • 我尝试了这里提出的第一个解决方案,但没有成功:https://stackoverflow.com/a/7367076/4204026

我也尝试了 URL 映射:

<urlMappings>
    <add url="~/login" mappedUrl="~/Views/LoginPage.aspx" />
    <add url="~/login/" mappedUrl="~/Views/LoginPage.aspx" />
</urlMappings>

老实说,我不知道这里发生了什么。我注意到的一件事是,当应用程序通过 Visual Studio 运行时,LoginPage.aspx 上的 &lt;form&gt; 标记在 Chrome 中显示为:

<form method="post" action="LoginPage" id="ct101" class=".myForm">

通过 IIS:

<form method="post" action="./" id="ct101" class=".myForm">

也不确定这是否是个问题。我尝试将action 硬编码为login 以查看会发生什么并且它确实重定向到正确的页面,但怀疑没有触发回发 - 我的 Session 变量返回 null 并且没有使用查询字符串。

下面是相关的LoginPage.aspx前端代码(剪掉一堆不相关的HTML):

<%@ Page Title="DREW KENNEDY | WELCOME" Language="C#" MasterPageFile="Site.Master" AutoEventWireup="true" CodeBehind="LoginPage.aspx.cs" Inherits="MyMedia.Views.LoginPage" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <!-- form is located on Site.Master -->
    <asp:Button OnClick="LoginBtn_Click" CssClass="login" runat="server" name="submit" Text="Sign In" />
</asp:Content>

还有LoginPage.aspx.cs中的LoginBtn_Click方法:

protected void LoginBtn_Click(object sender, EventArgs e) {
    //Tried the following line while commenting out everything else to make sure Postback is being ignored
    //Response.Write("<script>alert('Test');</script>");
        try {
            AbstractPersistenceDecorator decorator = new PersistenceDecorator();
            string uname = username.Text.Trim();//username is a TextBox Control
            string pass = password.Text.Trim();//password is a TextBox control

            bool isCookieRequested = CheckBox.Checked;
            if (decorator.authenticate(uname, pass)) {//calling SQL Server for authentication
                User AuthenticatedUser = (User)Session["User"] ?? decorator.getUserInfo(uname);

                if (Session["User"] == null) Session["User"] = AuthenticatedUser;

                if (isCookieRequested) {
                    HttpCookie cookie = new HttpCookie("username", AuthenticatedUser.Username);
                    cookie.Expires.AddDays(7);
                    Response.Cookies.Add(cookie);
                } else {
                    Session.Timeout = 15;
                }
                Thread.Sleep(1600);
                //string redirect = string.Format("dashboard?username={0}", AuthenticatedUser.Username);
                Response.Redirect("dashboard?username=" + AuthenticatedUser.Username);
            }
        } catch (Exception ex) {
            //who cares?
        }
    }

最后的信息:

  • 运行 IIS 8.0
  • 使用 4.5 框架创建的应用程序,应用程序池也是 4.5 框架
  • 我已确保 ASP.NET 已安装在 IIS 上
  • 我在 global.asax 文件中确实有 URL ReWriting,但我不确定这是否有任何关系(我不知道如何)。
  • 我没有 Default.aspx 页面

编辑:

  • 刚刚在 IE11 和 FF 上通过 127.0.0.1 测试了项目,结果相同。

编辑 #2:

我尝试过的其他事情都没有成功:

  • 我尝试删除我的 URL 重写
  • 我尝试添加一个空的 URL 重写规则,即("Empty URL", "", "~/Views/LoginPage.aspx")

补充说明:

  • 我不使用 Telerik
  • 我不使用 ISAPI
  • Visual Studio 中的项目设置为debug 而不是release

【问题讨论】:

  • 您如何确定没有回发?如果您的事件处理程序抛出您只是吞下异常,那么它很可能看起来什么都不做。
  • @BenRobinson 我在try/catch 块上方添加了一个Response.Write();,同时注释掉了方法中的其余代码,但它仍然没有触发。它在我提供的代码中。如果在没有错误处理的情况下确实发生了错误,我会收到一个错误页面,但没有发生。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 是否调用了 Page_Load? Page.IsPostBack 的价值是什么?
  • Page.IsPostBack,建议你设置断点,而不是依赖设置文本框值。

标签: c# asp.net iis postback


【解决方案1】:

对于没有在 OP 中提供足够的信息,我深表歉意,因为我已经找到了答案。事实证明它与 ASP.NET 无关,而是SQL Server。我剥离了代码,在一次添加一段代码并剥离所有异常处理后,我通过 IIS 发现 IIS APPPOOL\.NET vX.X 没有访问数据库的权限。

我要做的是:

  • 在 MSQLSM 中,为 IIS APPPOOL\.NET v4.5 添加新登录名

进一步,在收到以下异常后,我发现它需要正确的权限才能执行某些命令:

对象“X”、数据库“X”、模式“dbo”的 SELECT 权限被拒绝

This Was Solved Here

  • 为新登录名提供适当的访问权限。登录属性 > 用户映射 > 检查 db_datareaderpublic

现在执行后面的代码。它仍然留下了为什么它禁止任何回发的问题,即使我在后面的代码中删除了任何 SQL 连接。很奇怪。

无论如何,感谢那些帮助过的人。

【讨论】:

    【解决方案2】:

    我建议您从默认页面重定向到预期页面,这样应该可以。 iis默认页面处理是通过isapi来处理静态内容,所以post数据可能无法生存

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2020-05-31
      • 2015-10-14
      • 2011-01-01
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多