有没有人知道我可以用来访问ASP.NET Webforms Web应用程序项目中所有页面的工具,脚本,包? (我们没有使用任何MVC功能)
最好,我希望能够生成一个要点击的URL列表,编辑列表,这样我就可以添加一些查询字符串参数,点击列表中的所有页面,并收集HTTP响应代码:(200,404) ,500,301,等等)。
答案 0 :(得分:0)
不要在应用程序中为URL使用字符串文字,而是在每个页面类中定义Url()方法,如下所示:
public static string Url() { get { return "~/this_page.aspx"; } }
public static string Url(int ID) { get { return "~/this_page.aspx?id=" + ID; } }
或列出静态类中的所有网址
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关于使用Selenium的一种可能的解决方案。
答案 1 :(得分: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));
}
}
}
您需要在OpenAllPages项目中放置包含要打开的页面的项目文件,并将其Copy to Output属性设置为“Copy if newer”。
我Form1_Load将TaskManager.csproj更改为项目文件的名称。 并在:
System.Diagnostics.Process.Start("chrome.exe", AddPagePrefix(page));
将参数重命名为您正在使用的浏览器的可执行文件。