部署的Mvc应用程序将无法运行

时间:2012-01-23 16:14:32

标签: asp.net-mvc-3 deployment

我在发布asp.net mvc3应用程序时遇到了一些问题。部署时,应用程序失败并显示“未找到路径控制器/ Dashboard / Alarmes”或未实现IController“Alarmes是DashboardController中的操作。不确定它是否与它有关,但Alarmes会返回Json结果。

我注意到的另一件事是,未部署由同一解决方案中的另一个项目引用的某些程序集(仅当我在mvc项目本身中引用它们时)。

有关这些的提示吗?

更新

路线注册:

 public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{*allpng}", new { allpng = @".*\.png(/.*)?" });
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
            routes.IgnoreRoute("{directory}/{resource}.asmx/{*pathInfo}");

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

行动:

public ActionResult Alarmes() {
    var alarmesPorPonto = new Dictionary<string, List<Ponto>>();
    var alarmes = _repositorioDeAlarmes.Pesquise(ObtenhaInicio(), DateTime.Today);

    foreach (var alarme in alarmes) {
        var tipo = alarme.Tipo;
        var ponto = alarme.Ponto;

        if (!alarmesPorPonto.ContainsKey(tipo.Nome)) {
            alarmesPorPonto.Add(tipo.Nome, new List<Ponto>());
        }

        if (!alarmesPorPonto[tipo.Nome].Contains(ponto)) {
            alarmesPorPonto[tipo.Nome].Add(ponto);
        }
    }

    return Json(alarmesPorPonto.Select(a => new { Tipo = a.Key, a.Value.Count }), JsonRequestBehavior.AllowGet);
    }

另一个缺少的信息:我正在将此应用程序部署到虚拟目录。

更新2

完整的控制器类:

public class DashboardController : Controller {
        private readonly IRepositorioDeAlarmes _repositorioDeAlarmes;
        private readonly bool _enableMap;      

        public DashboardController(IRepositorioDeAlarmes repositorioDeAlarmes) {
            _repositorioDeAlarmes = repositorioDeAlarmes;
            _enableMap = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableMap"]);            
        }

        public ActionResult Index() {
            ViewBag.EnableMap = _enableMap;
            return View();
        }

        public ActionResult Alarmes() {
            var alarmesPorPonto = new Dictionary<string, List<Ponto>>();
            var alarmes = _repositorioDeAlarmes.Pesquise(ObtenhaInicio(), DateTime.Today);

            foreach (var alarme in alarmes) {
                var tipo = alarme.Tipo;
                var ponto = alarme.Ponto;

                if (!alarmesPorPonto.ContainsKey(tipo.Nome)) {
                    alarmesPorPonto.Add(tipo.Nome, new List<Ponto>());
                }

                if (!alarmesPorPonto[tipo.Nome].Contains(ponto)) {
                    alarmesPorPonto[tipo.Nome].Add(ponto);
                }
            }

            return Json(alarmesPorPonto.Select(a => new { Tipo = a.Key, a.Value.Count }), JsonRequestBehavior.AllowGet);
        }
}

2 个答案:

答案 0 :(得分:3)

我怀疑你在调用动作而不是使用url助手时,在你的javascript中硬编码了url。

所以你写道:

<script type="text/javascript">
    $.getJSON('/Dashboard/Alarmes', function(result) {
        ...
    });
</script>

而不是:

<script type="text/javascript">
    $.getJSON('@Url.Action("Alarmes", "Dashboard")', function(result) {
        ...
    });
</script>

如果您的应用程序托管在虚拟目录中,则会生成正确的URL:

<script type="text/javascript">
    $.getJSON('/MyAppName/Dashboard/Alarmes', function(result) {
        ...
    });
</script>

答案 1 :(得分:0)

如果您尝试清理ASP.Net临时文件并重新启动Web服务器,该怎么办? [{windows-path} \ Microsoft.NET \ Framework {framework-version} \ Temporary ASP.NET Files]