2011-08-24 40 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)); 

命名参数,您使用的浏览器的可执行文件。

相关问题