ASP.Net MVC - ошибка не найдена - PullRequest
       9

ASP.Net MVC - ошибка не найдена

60 голосов
/ 15 февраля 2012

Я совершенно новичок в ASP.Net MVC.Я только что создал проект MVC3 в Visual Studio 2010. Движок представления - бритва.Когда я только что запустил приложение, оно показало правильный результат в браузере.URL-адрес http://localhost:4163/.Затем я применил «Сделать стартовой страницей» к Index.cshtml в папке ~ \ Views \ Home.Затем, когда я запустил приложение, URL-адрес стал http://localhost:4148/Views/Home/Index.cshtml, и он сказал, что ресурс не может быть найден.Что мне сделать, чтобы исправить это?Где выполняется сопоставление URL?

Файл Global.asax:

using System.Web.Mvc;
using System.Web.Routing;

namespace TEST
{

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
    }
 }

Ответы [ 21 ]

93 голосов
/ 15 февраля 2012

Отображение URL-адреса или «маршрутизация» обрабатывается Global.asax в корне вашего сайта ASP.NET MVC.

Когда вы нажимаете «Сделать стартовой страницей», он изменяет параметры проекта, чтобы найти его.файл относительно корня приложения.Но в MVC маршрут по умолчанию к вашей странице индекса на самом деле http://localhost:4163/Home/Index - прочитайте что-то вроде this , чтобы получить представление о том, как работает маршрутизация.

To "исправить«Теперь ваш проект пытается (и не может) перейти непосредственно к представлению, щелкните правой кнопкой мыши проект и выберите« Properties », перейдите на вкладку« Web »и выберите« Specific Page », оставив текстовое полепустой.Теперь, когда вы начинаете отладку, она должна снова перейти на домашнюю страницу - посмотрите на параметры маршрута по умолчанию, чтобы понять, почему в методе RegisterRoutes в Global.asax

24 голосов
/ 27 мая 2012

Убедитесь, что вы создали класс HomeController.cs в папке вашего контроллера.

10 голосов
/ 18 марта 2015

В аналогичной проблеме, с которой я столкнулся, у моего Action был атрибут HTTP "POST", но я пытался открыть страницу (по умолчанию это "GET").

Поэтому мне пришлось создать HTTPВерсия "GET".

6 голосов
/ 01 февраля 2016

Я тоже получил ту же ошибку html-404:

Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), возможно, был удален, если его имя изменилось, или временно недоступно.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Но после тщательного изучения я обнаружил, что оставил имя контроллера как Default1Controller вместо того, чтобы изменить его на HomeController.Когда я внес изменения и отладил приложение, оно заработало.Надеюсь, это поможет вам, если у вас возникнет такая же проблема.

5 голосов
/ 26 августа 2016

Невероятно, но я случайно удалил ключевое слово public из контроллера!

enter image description here

Думаю, это поможет точнобольше никто, но ты никогда не узнаешь ...

5 голосов
/ 28 июля 2015

Выполните следующие шаги для запуска приложения asp.net mvc.

  • Создание контроллера
    Щелкните правой кнопкой мыши папку контроллеров и добавьте контроллер.Примечание - не удаляйте постфикс контроллера.Соглашения ASP.NET MVC.
    Дайте имя контроллеру как «DemoController», и вы увидите, что действие «Index» присутствует в «DemoController».«Индекс» - это действие по умолчанию, присутствующее при создании контроллера.

  • Создание представления
    Щелкните правой кнопкой мыши на имени действия «Индекс» и сохраните имя представления по умолчанию, то есть «Индекс», и щелкнитена кнопку «Добавить».

  • Настройка маршрута
    Откройте файл Global.asax, после чего вы увидите, что настройка маршрута по умолчанию сопоставлена ​​с контроллером «Домой» и действием «Индекс»замените его на контроллер «Demo» и действие «Index».Отображение URL записывается в файле Global.asax.Когда вы откроете файл Global.asax, вы увидите следующие настройки:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

    Измените его на:

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    

И запустите ваше приложение, вы увидитеприложение в работе.

4 голосов
/ 15 февраля 2012

Ну, вы не можете установить страницу по умолчанию в asp.net mvc.Перейдите на global.asax.cs и посмотрите определение маршрутизации.Маршрут по умолчанию указывает на метод индекса HomeController.Вам лучше посмотреть несколько коротких фильмов о asp.net mvc или попытаться найти учебник для ужина с ботаниками , который довольно быстро познакомит вас с фреймворком.

Я думаю, что лучшие ответы об урокахбыли уже предоставлены в качестве ответов на этот вопрос:

Краткие учебные пособия по ASP.NET MVC

2 голосов
/ 14 января 2014

У меня была похожая проблема некоторое время назад при использовании VS 2012. Решить, просто перестроив приложение, нажав Build> Rebuild.

2 голосов
/ 15 февраля 2012

В asp.net mvc вы не можете использовать опцию «установить как стартовую страницу», потому что представления mvc не являются независимыми, как страницы веб-форм. Это только файлы шаблонов для отображения вашей модели. У них нет модуля обработки http. Все веб-запросы должны проходить через действия контроллера, вы не можете запрашивать представления напрямую.

1 голос
/ 28 мая 2016

(MVC 5): измените RouteConfig.cs, чтобы включить два routes, например:

            routes.MapRoute(
            name: "DefaultWithLanguage",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new {language= "[a-z]{2}"}
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

, поэтому, когда языковая часть маршрута не указана, она не ошибается именами контроллеров, которые несоответствует регулярному выражению "[a-z]{2}" и заменяет язык по умолчанию и перенаправляет на остальную часть маршрута ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...