默认文档上的回发失败

时间:2014-12-05 16:56:12

标签: c# asp.net iis postback

所以我用ASP.NET(C#)创建了一个Web应用程序(不是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上的<form>标记出现在Chrome中:

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

通过IIS:

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

不确定这是否也是一个问题。我尝试将action硬编码为login以查看会发生什么,并且它会重定向到正确的页面,但是由于怀疑没有触发Postback - 我的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 Framework创建的应用程序,应用程序池也是4.5 Framework
  • 我已确保在IIS上安装ASP.NET
  • 我在global.asax文件中有URL重写,但我不确定这是否与任何方式有关(我不知道如何)。
  • 我没有Default.aspx页面

修改

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

编辑#2:

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

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

附加说明:

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

2 个答案:

答案 0 :(得分:3)

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

我必须做的是:

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

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

  

对象&#39; X&#39;,数据库&#39; X&#39;,架构&#39; dbo&#39;

上的SELECT权限被拒绝

This Was Solved Here

  • 为新登录提供正确的访问权限。登录属性&gt;用户映射&gt;检查db_datareaderpublic

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

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

答案 1 :(得分:0)

我建议您从默认页面重定向到预期页面然后这应该有效。 Iis默认页面处理是通过isapi来处理静态内容,因此后期数据可能无法生存