找不到资源

本文关键字:资源 找不到 | 更新日期: 2023-09-27 17:54:25

这简直要把我逼疯了。

我有这个项目,我几个月没有接触FeedController。一切正常。然后,我打开FeedController来改变一个动作中的一些代码,由于某种原因,VS2010崩溃了。好吧,VS之前已经崩溃了,没什么异常。

所以我重新启动VS,神秘的是,FeedController开始给"404资源不能找到"错误。

所以我检查了Global.asax, Web.Config, StartURL,所有人推荐的东西。不能让它工作。如果我调用/Feed/Index,它工作!但是/Feed/只是给了我错误。

将整个控制器的名称更改为ShitController,它只是工作完美!不知怎的,这个项目决定"Feed"是某种"诅咒词"。

清理解决方案,/bin/重新启动vs开发服务器,重新启动计算机,永远只是代理。

我开始认为这是一个严重的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 }
);

更新:我注释了所有的路由,只留下了默认路由,但错误仍然存在。

更新:这是整个控制器。只改变了街机的动作,并注释了"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);
    }
}

将Index操作更改为Config,它可以工作。似乎问题是与默认的隐式"索引",因为显式/饲料/索引也工作。

找不到资源

也许你的路由需要添加以下路由?

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