2013-01-19 83 views
0

好吧,这让我疯狂。MVC该资源无法找到

我有这个项目,我是个月,没有触及FeedController。一切工作正常。 然后,我打开FeedController来更改某个操作中的某些代码,出于某种原因,VS2010崩溃了。好的,VS之前已经崩溃了,没什么不寻常的。

所以我重新启动VS,并神秘地,FeedController开始给“404资源无法找到”错误。

所以我查了Global.asax,Web.Config,StartURL,所有人都推荐的东西。无法让它工作。如果我拨打/Feed/Index,It Works!但/Feed/只是给了我错误。

将整个控制器的名称更改为ShitController,它完美无缺!不知何故,该项目决定“饲料”是某种“诅咒词”。

清理解决方案,/bin/重启vs dev服务器,重新启动计算机,它只是经纪人永远。

我开始认为这是一个MVC3严重的BUG。

有人吗?

我越来越疯狂。我应该出去走走,也许:)

路线:

routes.MapRoute(
    "XBLContentDetailsLocale", 
    "XBLContent/Details/{guid}/{locale}", 
    new { controller = "XBLContent", action = "Details"}, 
    new { guid = @"[0-9|a-z|\-]{36}", locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}"} 
); 

routes.MapRoute(
    "XBLContentDetails", 
    "XBLContent/Details/{guid}", 
    new { controller = "XBLContent", action = "Details" }, 
    new { guid = @"[0-9|a-z|\-]{36}" } 
); 


routes.MapRoute(
    "XBLContentDaysLocale", 
    "XBLContent/{days}/{locale}", 
    new { controller = "XBLContent", action = "Index" }, 
    new { days = @"[0-9]", locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}" } 
); 

routes.MapRoute(
    "XBLContentDays", 
    "XBLContent/{days}", 
    new { controller = "XBLContent", action = "Index" }, 
    new { days = @"[0-9]" } 
); 

routes.MapRoute(
    "FeedRouteFull", 
    "Feed/{action}/{sort}/{locale}", 
    new { controller = "Feed", action = "GameAddons" }, 
    new { sort = @"[a-z|A-Z]+", locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}" } 
); 

routes.MapRoute(
    "FeedRouteSort", 
    "Feed/{action}/{sort}", 
    new { controller = "Feed", action = "GameAddons", sort = UrlParameter.Optional }, 
    new { sort = @"[a-z|A-Z]+" } 
); 

routes.MapRoute(
    "FeedRoute", 
    "Feed/{action}", 
    new { controller = "Feed", action = "Index" } 
); 

routes.MapRoute(
    "Locale", 
    "{locale}", 
    new { controller = "Home", action = "Index" }, 
    new { locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}" } 
); 

routes.MapRoute(
    "ControllerLocale", 
    "{controller}/{locale}", 
    new { controller = "Home", action = "Index", locale = UrlParameter.Optional }, 
    new { locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}" } 
); 

routes.MapRoute(
    "ControllerActionLocale", 
    "{controller}/{action}/{locale}", 
    new { controller = "Home", action = "Index", locale = UrlParameter.Optional }, 
    new { locale = @"[a-z|A-Z]{2}-[A-Z|a-z]{2}" } 
); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

UPDATE: 我评论的所有路由只留下一个默认,并且错误依然存在。

更新: 这里是整个控制器。不仅改变了街机动作,并评论了“oldcode”:

public class FeedController : Controller 
{ 
    XBLContentContext db = new XBLContentContext(); 

    private int activemenu = 4; 

    private const int QT_FEED = 12; 

    public ActionResult Index(string locale) 
    { 
     if (String.IsNullOrEmpty(locale)) 
      locale = "en-us"; 


     ViewBag.Title = "Xbox LIVE Feeds"; 
     ViewBag.Description = "Xbox LIVE Feed generator. Configure and add it to your favourite feed reader."; 
     ViewBag.Keywords = "xbox, live, tools, feed, syndication, rss, atom"; 

     ViewBag.ContentType = Enum.GetValues(typeof(ContentType)).Cast<ContentType>().Select(v => new SelectListItem 
     { 
      Selected = (v == ContentType.Arcade), 
      Text = v.ToString().ToSentence(), 
      Value = v.ToString() 
     }); 
     ViewBag.SortBy = Enum.GetValues(typeof(SortBy)).Cast<SortBy>().Select(v => new SelectListItem 
     { 
      Selected = (v == SortBy.OfferStartDate), 
      Text = v.ToString().ToSentence(), 
      Value = v.ToString() 
     }); 

     ViewBag.Regions = (from x in GlobalVariables.Regions 
          select new SelectListItem 
          { 
           Selected = (x.ID.ToLower() == locale), 
           Text = x.Country, 
           Value = x.ID.ToLower() 
          }).OrderBy(x => x.Text).ToList(); 

     return View(); 
    } 

    public ActionResult AllDownloads(string sort, string locale) 
    { 
     var today = DateTime.Today; 
     var region = "All Regions"; 

     var qry = from c in db.XBLRegionalContents.Include("Region").Include("Content") 
        where c.PublishDate <= today 
        select c; 

     var qry2 = from c in qry 
        group c by c.ContentId into grouped 
        let maxdate = grouped.Max(x => x.PublishDate) 
        select new 
        { 
         Key = grouped.Where(x => x.ContentId == grouped.Key && (x.PublishDate == maxdate)).FirstOrDefault(), 
         Value = grouped.Where(x => x.ContentId == grouped.Key).Select(x => x.Region) 
        }; 

     if (!String.IsNullOrEmpty(locale)) 
      qry2 = from c in qry2 
        where c.Value.Any(x => x.ID == locale) 
        select c; 

     var model = qry2.OrderByDescending(x => x.Key.PublishDate).Take(QT_FEED).ToDictionary(x => x.Key, x => x.Value); 

     if (!String.IsNullOrEmpty(locale) && model.Count() > 0) 
      region = model.FirstOrDefault().Key.Region.CountryEnglish; 

     ViewBag.Language = locale; 
     ViewBag.FeedTitle = "XBLTOOLS - Latest Content"; 
     ViewBag.FeedDescription = String.Format("{0} - {1}", region, DateTime.Now); 

     return View("GlobalFeed", model); 
    } 

    public ActionResult FullGames(string sort, string locale) 
    { 
     var today = DateTime.Today; 
     var region = "All Regions"; 

     var indie = ContentType.IndieGames.ToString(); 
     var qry = from c in db.XBLRegionalContents.Include("Region").Include("Content") 
        where c.Content.RelatedGameId == null && c.Content.FileSize > 0 
        && c.PublishDate <= DateTime.Today 
        && c.Content.ContentType != indie 
        select c; 

     var qry2 = from c in qry 
        group c by c.ContentId into grouped 
        select new 
        { 
         Key = grouped.Where(x => x.ContentId == grouped.Key).FirstOrDefault(), 
         Value = grouped.Where(x => x.ContentId == grouped.Key).Select(x => x.Region) 
        }; 

     if (!String.IsNullOrEmpty(locale)) 
      qry2 = from c in qry2 
        where c.Value.Any(x => x.ID == locale) 
        select c; 

     var model = qry2.OrderByDescending(x => x.Key.PublishDate).Take(QT_FEED).ToDictionary(x => x.Key, x => x.Value); 

     if (!String.IsNullOrEmpty(locale) && model.Count > 0) 
      region = model.FirstOrDefault().Key.Region.CountryEnglish; 

     ViewBag.Language = locale; 
     ViewBag.FeedTitle = "XBLTOOLS - Full Games"; 
     ViewBag.FeedDescription = String.Format("{0} - {1}", region, DateTime.Now); 

     return View("GlobalFeed", model); 
    } 

    public ActionResult Arcade(string sort, string locale) 
    { 
     var page = db.XBLPages.First(x => x.Type == (int)XBLPageType.List); 
     using (XBLPageCrawler crawler = new XBLPageCrawler(page, ContentType.Arcade, DownloadType.Game, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, crawler.CType.GetDescription()); 

      return View("Feed", crawler.PageContent); 
     } 
     #region OLDCODE 
     // using (XBLChart p = new XBLChart(ContentType.Arcade, DownloadType.Game, sort, locale)) 
     // { 
     //  var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
     //  ViewBag.Language = locale; 
     //  ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

     //  return View("Feed", p.ListaRegional); 
     // } 
     #endregion 
    } 

    public ActionResult GamesOnDemand(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.GamesOnDemand, DownloadType.Game, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    public ActionResult IndieGames(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.IndieGames, DownloadType.Game, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    public ActionResult GameDemos(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.GameDemos, DownloadType.GameDemo, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    public ActionResult GameAddons(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.GameAddons, DownloadType.GameAddon, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    public ActionResult GameVideos(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.GameVideos, DownloadType.GameVideo, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    public ActionResult ThemesAndGamerPic(string sort, string locale) 
    { 
     using (XBLChart p = new XBLChart(ContentType.ThemesAndGamerPic, DownloadType.ThemesAndGamerPic, sort, locale)) 
     { 
      var countrycode = String.IsNullOrEmpty(locale) ? String.Empty : String.Format("{0} - ", locale.Split('-')[1].ToUpper()); 
      ViewBag.Language = locale; 
      ViewBag.FeedTitle = String.Format("{0}{1}", countrycode, p.CType.GetDescription()); 

      return View("Feed", p.ListaRegional); 
     } 
    } 

    protected override void Dispose(bool disposing) 
    { 
     db.Dispose(); 
     base.Dispose(disposing); 
    } 
} 

UPDATE 改变了指数动作配置和它的作品。似乎问题与默认隐式“索引”,因为显式/饲料/索引也起作用。

+1

你能张贴你的路线吗?如果主机IDE崩溃并导致问题,那么这不是一个错误。 –

+0

您的Feed控制器中是否有多种方法?你能够在控制器中发布代码和调用它的代码吗? –

+1

您是将它部署到IIS还是在本地开发服务器上运行? – flup

回答

0

也许您的路线需要添加以下路线?

routes.MapRoute(
    "Feed", 
    "{controller}/{action}/{id}", 
    new { controller = "Feed", action = "Index", id = UrlParameter.Optional } 
);