2011-08-24 75 views
0

有沒有人知道一個工具,腳本,包,我可以用來訪問ASP.NET Webforms Web應用程序項目中的所有頁面? (我們沒有使用任何MVC功能)工具/腳本訪問ASP.NET項目中的所有頁面?

最好,我想能夠生成一個網址列表點擊,編輯列表,所以我可以添加一些查詢字符串參數,命中列表中的所有頁面,並收集HTTP響應代碼:(200,404,500,0301,無論如何)。

+0

你使用webforms,mvc等? –

+0

Webforms。編輯問題澄清 – Shlomo

回答

0
  • 設計時間

而不是在你的應用程序中使用字符串文字的網址,定義網址()在每個頁面類這樣的方法:

public static string Url() { get { return "~/this_page.aspx"; } } 
public static string Url(int ID) { get { return "~/this_page.aspx?id=" + ID; } } 

或列表中的一個的所有URL靜態類

public static class URL { 
    public static string Login() { get { return "~/login.aspx"; } } 
    public static string DisplayRecord(int recordID) 
     { get { return "~/display.aspx?id=" + recordID; } } 
  • 運行時間

使用Web測試框架來抓取所有鏈接並編輯結果。關於使用硒的一種可能的解決方案,我blogged

+0

硒正在變暖,但我寧願處理.csproj中的信息而不是抓取所有鏈接。我也希望能夠以編程方式和手動方式構建和添加到列表中。 – Shlomo

0

我做了一個WinForms應用程序,它可以從.csproject獲取可以訪問的頁面,並且可以通過單擊按鈕打開它們。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Windows.Forms; 
using System.Xml; 
using System.Xml.XPath; 

namespace OpenAllPages 
{ 
    public partial class Form1 : Form 
    { 
     public static IList<string> Pages; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string xmlstring = ReadXml("TaskManager.csproj"); 
      Pages = ParseAllPages(xmlstring); 
      pagesListBox.DataSource = Pages; 
     } 

     private string ReadXml(string location) 
     { 
      try 
      { 
       var myFile = new StreamReader(location); 
       string myString = myFile.ReadToEnd(); 
       myFile.Close(); 
       return myString; 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(String.Format("An error occurred: '{0}'", e.Message)); 
      } 
      return null; 
     } 

     private IList<string> ParseAllPages(string xmlstring) 
     { 
      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.LoadXml(xmlstring); 
      XPathNavigator nav = xmlDoc.DocumentElement.CreateNavigator(); 
      XmlNamespaceManager manager = new XmlNamespaceManager(nav.NameTable); 
      manager.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/2003"); 
      var elements = nav.Select("x:ItemGroup/x:Content", manager); 

      var pageList = new List<string>(); 
      while (elements.MoveNext()) 
      { 
       var page = elements.Current.GetAttribute("Include", ""); 
       if (page.EndsWith(".aspx")) 
        pageList.Add(page); 
      } 
      return pageList as IList<string>; 
     } 

     private string AddPagePrefix(string page) 
     { 
      return "http://localhost:8080/" + page; 
     } 

     private void openAllButton_Click(object sender, EventArgs e) 
     { 
      foreach (string page in Pages) 
       System.Diagnostics.Process.Start("chrome.exe", AddPagePrefix(page)); 
     } 
    } 
} 

Here is a link to the code

您需要將其中包含要在OpenAllPages項目打開並設置它的複製到輸出屬性爲「複製,如果新」頁面的項目文件。

我Form1_Load將TaskManager.csproj更改爲您的項目文件的名稱。 而在:

System.Diagnostics.Process.Start("chrome.exe", AddPagePrefix(page)); 

命名參數,您使用的瀏覽器的可執行文件。

相關問題