2014-12-05 57 views
9

所以我用ASP.NET(C#)創建了一個Web應用程序(不是網站),它在VS13環境下編譯得很好。但是,當我在IIS上發佈它時,默認文檔上的回發失敗。默認文檔稱爲LoginPage.aspx。只要我點擊來運行我的代碼,它所做的只是刷新頁面。該項目暫時已在我的本地127.0.0.1 IP地址上發佈。默認回傳失敗文檔

我知道這是一個記錄的問題,但我已經嘗試了很多解決方案,並沒有遇到一個解決方案。我曾嘗試過的一些解決方案:

  • 使用最少的代碼創建一個全新的Web應用程序,以嘗試訪問任何回傳而沒有成功。
  • 我嘗試沒有成功這裏提出的第一個解決方案:在無所適從,這裏發生了什麼

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

    我老老實實:https://stackoverflow.com/a/7367076/4204026

我也試過URL映射。當應用程序被通過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以查看會發生什麼,並確實重定向到正確的頁面,但是由於懷疑沒有回發被觸發 - My 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> 

而且LoginBtn_Click方法LoginPage.aspx.cs:

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
+0

你是如何確定郵政回來沒有發生?如果你的事件處理程序拋出你只是吞下異常,所以它可能看起來什麼都不做。 – 2014-12-05 17:11:43

+0

@BenRobinson我在'try/catch'塊的上方拋出了一個'Response.Write();'註釋掉方法中的其餘代碼,但它仍然不會觸發。在我提供的代碼中就在上面。如果在這種情況下真正發生錯誤而沒有錯誤處理,我會收到一個錯誤頁面,但這並沒有發生。 – 2014-12-05 17:14:49

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 Page_Load打電話給誰? – 2014-12-08 20:52:06

回答

3

我很抱歉沒有在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連接。很奇怪。

無論如何,感謝那些幫助過的人。

0

我建議你從默認的頁面重定向預期頁面然後這應該工作。 Iis默認頁面處理是通過isapi完成的,以處理靜態內容,因此後期數據可能無法生存