这段代码在其他地方工作正常,唯一改变的是它现在在循环中,我按项目调用变量。而不是模型。当我预先定义newurl
并且页面内容包含代码工作并且它将生命解析为“实时”这是正确的所以我觉得它与此有关吗?但是我收到以下错误:
异常详细信息:System.ArgumentException:必须指定用于在字符串中进行解析的有效信息。
在这一行:
lives = "Live";
我之后确实有这个:
else
{
lives = "Dead";
}
但是,我删除它以找到错误,否则它只是解析并将变量设置为死。
public enum Live
{
Indexed, Live, Dead
}
虽然它表明它与变量有关吗?我尝试将对象的另一个变量设置为newurl
字符串以检查它是否正确,它是。我也尝试过预定义newurl
但不包含页面包含它仍然不起作用所以这两个都有问题吗?
所以我知道item.Anchor
等正确地引入变量它似乎没有转化为工作?
public ActionResult CheckLinks(Link model)
{
var items = db.Links.Where(p => p.UserTable.ID == UserTableID).ToList();
foreach (var item in items)
{
string pageContent = null;
string visiturl = "http://webcache.googleusercontent.com/search?q=cache:" + "http://" + item.Identifier.domain + item.Obdomain;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(visiturl);
HttpWebResponse myres = (HttpWebResponse)myReq.GetResponse();
using (StreamReader sr = new StreamReader(myres.GetResponseStream()))
{
pageContent = sr.ReadToEnd();
}
string lives = "";
if (pageContent.Contains(item.Anchor))
{
lives = "Indexed";
}
else
{
string newurl = "http://" + item.Identifier.domain + item.Obdomain;
HttpWebRequest newReq = (HttpWebRequest)WebRequest.Create(newurl);
HttpWebResponse newres = (HttpWebResponse)newReq.GetResponse();
using (StreamReader sr = new StreamReader(newres.GetResponseStream()))
{
pageContent = sr.ReadToEnd();
}
if (pageContent.Contains(item.Anchor))
{
lives = "Live";
}
var link = db.Links.SingleOrDefault(c => c.LinkID == item.LinkID);
link.live = (Link.Live)Enum.Parse(typeof(Link.Live), lives);
db.Entry(link).State = EntityState.Modified;
}
db.SaveChanges();
}
return RedirectToAction("Index");
}
答案 0 :(得分:0)
问题在于您的if-else
逻辑。 lives
的值可能是一个空字符串,无法正确解析。
string lives = "";
if (pageContent.Contains(item.Anchor))
{
lives = "Indexed";
}
else
{
// ...
if (pageContent.Contains(item.Anchor))
{
lives = "Live";
}
// We can have lives == "" at this point, which Enum.Parse won't process
// ...
}
最好的猜测是你打算默认为Dead
,因此它会正确解析。
string lives = "Dead";
但是,既然你在发布问题之前已经exhaustively debugged,那么你已经知道了。正确?
正如评论中所提到的,无论如何在这里使用字符串并没有多大意义。这样编译器就可以检测到您的错误,并阻止您使用它进行编译。
Link.Live lives = Link.Live.Dead;
if (pageContent.Contains(item.Anchor))
{
lives = Link.Live.Indexed;
}
else
{
// ...
if (pageContent.Contains(item.Anchor))
{
lives = Link.Live.Live;
}
// No need to parse from a string...
// ...
}