2013-08-24 3 views
0

Я создал Авторизоваться фильтрCookie не установлен в MVC 4

public class LandedAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) { 
     if (httpContext == null) 
     throw new ArgumentNullException("httpContext"); 
     if (HttpContext.Current.Response.Cookies["LegalDisclaimer"].Value != "Accepted") 
     { 
     return false; 
     } 
     return true; 
} 
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext){ 
    string url = filterContext.HttpContext.Request.Url.ToString(); 
    System.Diagnostics.Debug.WriteLine(url); 
    filterContext.Result = new RedirectToRouteResult(
    new RouteValueDictionary { 
    { "action", "Index" }, 
    { "controller", "Landing" }, 
    { "returnUrl", url } 
    }); 
} 

}

и мой Landing контроллер

public ActionResult Index(string returnUrl) 
     { 
      ViewBag.rdParm = returnUrl; 
      return View(); 
     } 
     public ActionResult Accept(string returnUrl) 
     { 
      HttpCookie cookie = new HttpCookie("LegalDisclaimer", "Accepted"); 
      Response.Cookies.Add(cookie); 
      if (Url.IsLocalUrl(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 

Затем я настроить контроллер как

[Landed] 
public class someController : Controller 
{ 
contoller actions here 
} 

Проблема заключается в том, что coo LegalDisclaimer coo kie никогда не устанавливается и всегда возвращает null. Это моя первая попытка изучить фильтр Authorize в mvc и его 3 дня без какого-либо прогресса. Может ли кто-нибудь помочь мне отладить это, пожалуйста?

ответ

1

Игнорировать это - см обновление ниже

Похоже, что вы никогда не в состоянии установить куки. Действие Accept в вашем LandingController, я полагаю, единственное, что устанавливает cookie. Однако вы никогда не сможете попасть туда, потому что пользовательский фильтр авторизации (LandedAttribute), который вы создали, останавливает приложение от доступа (потому что cookie не установлен).

Возможно, вы захотите добавить [AllowAnonymous] на это действие, чтобы разрешить его, чтобы можно было установить файл cookie.

например.

[AllowAnonymous] 
public ActionResult Accept() 
{ 
    // body of the action here. 
} 

UPDATE

Я только что понял ваш LandedAttribute пытается прочитать исходящие куки, не входящие печенье.

У вас есть HttpContext.Current.Response. Используйте куки-файлы на Request, а не Response

Действие вашего контроллера должно по-прежнему использовать ответ, потому что вы устанавливаете исходящий файл cookie.

+0

Его получение атрибута accept. Но я попробовал ваш ответ, и он все равно продолжает получать меня на странице «Отказ от ответственности». –

+0

«Признать атрибут» ???? У вас есть действие LandedAttribute или действие Accept Accept. Я не уверен, что вы имеете в виду. –

+0

Я имел в виду действие не атрибут –

Смежные вопросы