Это поставило меня в тупик, и я думаю, что это может быть ошибкой в реализации Microsoft MVC. Я строю веб-сайт MVC с использованием VS2008 SP1. В попытке заблокировать мой веб-сайт я отредактировал свой контроллер, чтобы он выглядел так:
1 public class IdeaController : Controller
2 {
3 [Authorize(Users = "whozmom")]
4 public ActionResult Index(string zapp, int? page)
Я использую членство в ASP.NET и аутентификацию по формам. Когда я публикую свой код на моем хосте, появляется диалоговое окно аутентификации Windows. Я ломал голову, пытаясь понять, что я мог сделать, чтобы это произошло. Я почти полностью переписал свое приложение, пытаясь выяснить это, и сузил его до одного изменения в моем файле Global.asax.cs. Сначала позвольте мне показать вам (соответствующую часть) версию с ошибками:
1 routes.MapRoute(
2 "Ideas",
3 "{zapp}/{page}/",
4 new { controller = "Idea", action = "Index", zapp = "Office", page = "" }
5 );
6
7 routes.MapRoute(
8 "Default", // Route name
9 "{controller}/{action}/{id}", // URL with parameters
10 new { controller = "Idea", action = "Index", id = "" } // Parameter defaults
11 );
Когда я запускаю свой код по этому маршруту локально, мой браузер просто выходит пустым ... страница входа никогда не отображается. Если я запускаю свое приложение на своем хосте, оно открывает диалоговое окно аутентификации Windows. Если я вместо этого изменю свой маршрут на:
1 routes.MapRoute(
2 "Ideas",
3 "Ideas/{zapp}/{page}/",
4 new { controller = "Idea", action = "Index", zapp = "Office", page = "" }
5 );
6
7 routes.MapRoute(
8 "Default", // Route name
9 "{controller}/{action}/{id}", // URL with parameters
10 new { controller = "Idea", action = "Index", id = "" } // Parameter defaults
11 );
Все отлично работает. Обратите внимание на изменение в строке № 3, добавив «Идеи /» перед моей строкой URL. Может кто-то объяснить это мне? Я также могу решить эту проблему, удалив строку Authorize из моего контроллера (строка № 3 выше), но затем, конечно, я теряю безопасность.
ОБНОВЛЕНИЕ: Вот мой полный раздел членства:
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,
System.Web,
Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/" />
</providers>
</membership>