Почему ASP.NET MVC MapRoute вызывает диалоговое окно проверки подлинности Windows? - PullRequest
3 голосов
/ 11 мая 2009

Это поставило меня в тупик, и я думаю, что это может быть ошибкой в ​​реализации 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>

1 Ответ

0 голосов
/ 01 сентября 2012

Мне кажется, что это вызвано неверно настроенным маршрутом. У вас правильно настроен маршрут к вашей странице входа? Может быть, попробуйте RouteDebugger от Phil Haack: RouteDebugger 2.0

...