аутентификация и настройка маршрута

#c# #asp.net-mvc #security #account

#c# #asp.net-mvc #Безопасность #Учетная запись

Вопрос:

при первой загрузке мое приложение должно показывать мне «localhost / home / index», но всегда перенаправлять меня на «localhost / Account / login?returnUrl=/»

это конфигурация, которая у меня есть

Настройка маршрута

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

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

WebConfig

  <authentication mode="Forms">
      <forms defaultUrl="~/Home/index" loginUrl="~/Account/login" timeout="60" />
 </authentication>
  

Контроллеры

  [AllowAnonymous]
 public class HomeController : BaseController
  
   [AllowAnonymous]
  public class AccountController : BaseController
  

Я бы хотел не перенаправлять на «localhost / account / login»

Обновить

первая загрузка всегда вводит условие, и RedirectToLoginPage метод выполняется

 public class BaseController : Controller
{
  protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var load = (HomeModel)Session["SessionLayout"] == null;

...
            if (load)
            {
                FormsAuthentication.SignOut();
                //FormsAuthentication.RedirectToLoginPage();

                PageLoad();
            }

           ...
        }
    }   
}

  

Ответ №1:

Это пример того, как я использую атрибут actionfilterattribute, надеюсь, это поможет.

Код для атрибута actionfilterattribute;

 namespace  CP.Controladores
{
public class ValidateCaptchaAttribute : ActionFilterAttribute{

    public override void OnActionExecuting(ActionExecutingContext 
    filterContext)
    {
         filterContext.ActionParameters["CaptchaIsValid"] = recaptchaResponse.IsValid;
         base.OnActionExecuting(filterContext);
    }
}
  

код для контроллера.

 [HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[CP.Controladores.ValidateCaptcha()]
public ActionResult MailDeContacto(FormCollection values, bool 
CaptchaIsValid)
{
    // Do something
}
  

помечая метод, этот фильтр имеет отношение только к действию «MailDeContacto», в противном случае вы можете настроить в globalfilters, и фильтр будет влиять на все приложения.

Комментарии:

1. Да, у него есть тег [AllowAnonymous] public class BaseController : Controller

2. в моем web.config я использую <режим аутентификации =»Forms»> <forms loginUrl=»~ / Account /Login» timeout = «2880» /> </authentication> пожалуйста, удалите defaultUrl =»~ / Home / index» и дайте мне знать, пожалуйста.

3. результат все тот же

4. встречается редко. Попробуйте удалить basecontroller, и пусть homecontroller просто наследует класс контроллера. У меня он равен вам, и он отлично работает (без basecontroller), возможно, ошибка есть!

5. Я был прав, удалите BaseController из HomeController, и он отлично работает. [Разрешить анонимность] открытый класс HomeController : контроллер.