2015-03-05 3 views
2

Я получил контроллер (названный DeficienciesController) с помощью метода IndexASP.NET MVC 5, IIS Express 8 - не ударять индекс

public ActionResult Index(int? deficiencyReviewId) 
     { 
      return View(); 
     } 

Но когда я запустить приложение локально в IIS Express 8 не будет нажмите метод Index, вместо этого он получает код статуса 301, а браузер добавляет/к URL-адресу.

Странная вещь, когда я опубликовать сайт на веб-сервер, он работает прекрасно .. При использовании Html.ActionLink его тег выглядит следующим образом:

<a href="/Deficiencies">Deficiencies</a> 

Так что я жду его сделать ссылку: http://localhost:49440/Deficiencies

Но когда я нажимаю его она меняется: http://localhost:49440/Deficiencies/

Второй S дает мне страницу «HTTP Error 403.14 - Forbidden», потому что она пытается просмотреть содержимое папки. Действие контроллера не активируется.

Если я добавляю маршрутизацию атрибутов к контроллеру и действию, все это отлично работает, Html.ActionLink находит правильный маршрут, но это не то, что я хочу.

Мой RouteConfig выглядит следующим образом:

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

    routes.MapMvcAttributeRoutes(); 

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

Действие Индекс единственное действие в контроллер, который не работает, другие действия, отлично работает.

Edit:

Я хотел бы вернуться с решением, но мой единственный рабочий раствор, чтобы это было вытащить проект из-источника управления на новое место, а затем удалить Int значение в действии. Затем работала страница Индекса. Затем я сделал новое действие, в котором был найден недостатокReviewId int. Поэтому я действительно не выяснил, в чем проблема, но это должна быть локальная проблема с моим компьютером, потому что мой коллега получил ее work ..

+0

Попробуйте переименовать переменную defiencyReviewId в "id". – sprinter252

+0

Я просто попробовал это. Я ожидал, что ActionLink с ID будет выглядеть так: http: //.../Deficiencies? Id = 9, но теперь он выглядит как http: //../Deficiencies/Index/9. Кроме того, страница без идентификатора все еще дает ошибку 403.14. –

ответ

0

На ваших маршрутах вы установили id=UrlParameter.Optional, но вы используете deficiencyReviewId. Когда вы запрашиваете /deficiencies, это на самом деле ожидает: /deficiencies?deficiencyReviewId= с int? значением.

Вы могли бы сигнатуру метода, как:

public ActionResult Index(int? deficiencyReviewId = null) 

Теперь deficiencyReviewId является необязательным параметром, так /deficiencies ударит ваш Index метод

Затем, чтобы удалить слэш, добавьте в ваш web.config

<rewrite> 
    <rules> 

    <!--To always remove trailing slash from the URL--> 
    <rule name="Remove trailing slash" stopProcessing="true"> 
     <match url="(.*)/$" /> 
     <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Redirect" redirectType="Permanent" url="{R:1}" /> 
    </rule> 

    </rules> 
</rewrite> 
+0

Это было отличное предложение, но это все равно приводит к добавлению/в конце URL-адреса, и отображается страница 403.14. URL-адрес заканчивается следующим образом: _/Недостатки /?deficiencyReviewId = 9_. Но я обязательно сохраню '= null'. –

+0

@MartinM Извиняюсь, я пропустил эту часть вашего вопроса. См. Мое редактирование – ediblecode

+0

Не беспокойтесь, однако я просто попробовал отредактированный код, и это тоже не сработало. Мой коллега просто пытался запустить его локально, и это сработало. Итак, теперь я пытаюсь вывести проект в новое место из источника-контроля. –