При запуске приложения, перед входом в систему, я хочу, чтобы несколько «страниц» были в порядке, чтобы перейти - PullRequest
1 голос
/ 29 февраля 2012

При запуске приложения, перед входом в систему, я хочу, чтобы несколько «страниц», которые находятся в той же папке, что и моя страница входа, были в порядке.

На старой земле aspx вы поместили файл web.config в папку, где жили эти страницы, и сделали это:

<system.web>
    <authorization>
        <allow users="*" />
    </authorization>
 </system.web>

Как правильно сделать это на земле MVC?Я пытался не помещать тег [Authorize] в методы контроллера, которые я хотел бы получить доступ, но это, кажется, не сокращает его.

Интересные новые доказательства ...

Я пошел в мою сеть.config

Я изменил это:

<authorization>
      <deny users="?" />
      <allow users="*" />
      <deny users="*" verbs="OPTIONS, PROPFIND, HEAD" />
</authorization>

на:

<authorization>
      <allow users="*" />
</authorization>

и теперь, если я наберу этот путь:

http://localhost/StudentPortal3G/Account/ChangePasswordSelfService

это работает,

Но если я наберу этот путь:

http://localhost/StudentPortal3G/Account.mvc.aspx/ChangePasswordSelfService

это не так (и это путь, сгенерированный Atml.ActionLink(...))

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

public static void RegisterRoutes(RouteCollection routes)
        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{resource}.css/{*pathInfo}");
            routes.IgnoreRoute ( "{resource}.jpg/{*pathInfo}" );
            routes.IgnoreRoute ( "{resource}.jpg" );
            routes.IgnoreRoute ( "{resource}.gif/{*pathInfo}" );

            RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new { folder = "Assets" });

            RouteTable.Routes.IgnoreRoute ( "{folder}/{*pathInfo}", new { folder = "Images" } );

            routes.IgnoreRoute ( "{*favicon}", new
            {
                favicon = @"(.*/)?favicon.ico(/.*)?"
            } );



            routes.IgnoreRoute("elmah.axd");
            //routes.MapRoute("About", "Home/About", new { controller = "Home", action = "About", id = "" });

            // you have to add this IgnoreRoute so that the PDFX pages get handled like a regular *.aspx page, not a MVC page. - EWB
            routes.IgnoreRoute("{resource}.pdfx");

            // allow MVC to run on IIS 5,6,7
            ///86383/asp-net-mvc-i-iis-5
            routes.Add(new Route("{controller}.mvc.aspx/{action}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary(new { controller = "Email" }) });


            routes.MapRoute(
                "Email",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                null  // Parameter defaults
            );

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

            routes.MapRoute(
                "Default2",                                              // Route name             
                "{controller}.aspx/{action}/{id}",                      // URL with parameters             
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults         ); 
            );
            routes.MapRoute(
                "Default3",                                             // Route name             
                "{controller}.mvc.aspx/{action}/{id}",                  // URL with parameters             
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults         ); 
            );
        }

Больше информации:если я закомментирую их, HTML.ActionLink начнет генерировать работающую ссылку.

       routes.Add(new Route("{controller}.mvc.aspx/{action}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary(new { controller = "Email" }) });

        routes.MapRoute(
            "Default2",                                              // Route name             
            "{controller}.aspx/{action}/{id}",                      // URL with parameters             
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults         ); 
        );
        routes.MapRoute(
            "Default3",                                             // Route name             
            "{controller}.mvc.aspx/{action}/{id}",                  // URL with parameters             
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults         ); 
        );

Затем, если я верну эту ссылку (которая необходима для работы на сервере 2008, я верю):

       routes.Add(new Route("{controller}.mvc.aspx/{action}", new MvcRouteHandler()) { Defaults = new RouteValueDictionary(new { controller = "Email" }) });

снова начинает падать ...

У кого-нибудь есть идеи?

Любая помощь приветствуется.

1 Ответ

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

Просто помните, что "местоположение" в вашем файле web.config основано на URL, а не на папках.Так что если у вас есть GuestController, вы можете сказать:

<location path="Guest">
<system.web>
  <authorization>
    <allow users="*" />
  </authorization>
</system.web>
</location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...