2016-09-08 6 views
1

Я генерирующая ссылку, используя код нижежереха mvc4 HTML хелпер не плывет к ожидаемой странице

@Html.ActionLink("Search", "Index", "Properties") 

на стороне клиента это делает

<a href="/Properties">Search</a> 

Глядя на ссылку выше я ожидал получил в

controller: Properties

action: Index

Когда я нажимаю ссылку я осуществлять навигацию http://localhost:49878/Properties/, и я получаю ошибку

Ошибка HTTP 403.14 - Forbidden Веб-сервер настроен не перечислить содержимое этого каталога.

Если я перехожу на http://localhost:49878/Properties/Index, я получаю ожидаемую страницу.

Почему?

Я посмотрел на RouteConfig, чтобы попытаться понять это и глядя на маршрут по умолчанию

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

Я думал, что ниже будет решить эту проблему, но это не так, то почему?

routes.MapRoute(
    name: "Search", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Properties", action = "Index", id = UrlParameter.Optional } 
); 
+1

У вас есть папка в вашем решении с именем 'Properties'? –

+0

Нет, но у меня есть контроллер с именем properties – tony09uk

+0

Вы уверены? (по умолчанию VS создаст один). И вы получите ту же ошибку, если не хотите (скажем) '.../Content' –

ответ

1

Вы видите только папку Свойства в вашем решении, как это:

solution

Но если открыть папку проекта, как это:

filedisk

Вы можете видеть две папки в двух путей :

корень

rootfolder

Просмотр папки

viewfolder

Система маршрутизации проверяет файловую систему, чтобы увидеть, если URL соответствует файл/папку на диске. Если он находит совпадение, маршрутизация игнорируется, и запрос обходит любые записи маршрута, чтобы файл обслуживался напрямую.

Чтобы исправить это, вы можете установить RouteExistingFiles свойство true в вашем RouteConfig:

routes.RouteExistingFiles = true; 
1

Вы не можете использовать Свойства, так как это имя папки с AssemblyInfo.cs. Так вроде ограниченное имя.

Добавить это

routes.RouteExistingFiles = true; 

RegisterRoutes в RouteConfig игнорировать физические пути (хотя это будет иметь некоторые осложнения для статических файлов, не проверить его тщательно).

Лучший подход - это переименование вашего контроллера и использование его не уверен, есть ли что-то еще, что можно сделать.