2014-10-28 8 views
1

Мне нужно реализовать ActionFilterAttribute [POST] ActionResult() в контроллере. Проблема в том, что я пытаюсь «перенаправить» на страницу, если проверка не прошла ... Но она не работает. Проверка выполняется, но затем возвращается к следующей строке ActionResult() и, наконец, при возврате представления, только после этого «перенаправляется» на страницу, указанную в валидации. В конечном итоге мне нужно остановить операторы ActionResult() и «перенаправить» на страницу, указанную в валидации. Я попытался OnActionExecuting() и OnActionExecuted(), но не работает какой-либоasp.net mvc validate [HttpPost] ActionResult()

Мне нужно ...

filterContext.HttpContext.Response.Redirect (loginUrl, true); 

Убежать, «перенаправлять» на странице указано

Мой код:

[HelperSomeValidations("")] 
[HttpPost] 
public ActionResult Create(Pais pais) 
{ 
    try 
    { 
    PaisBLL.saveNew(pais); 
    } 
    catch (Exception ex) 
    { 
    ViewBag.error = ex; 
    return View(“Error”); 
    } 
    return RedirectToAction(“Index”); 
} 

public class HelperSomeValidations : ActionFilterAttribute 
{ 

    public HelperSomeValidations(String permiso) 
    { 
    this.permiso = permiso; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    var user = filterContext.HttpContext.Session["coco"]; 
    if (user == null) //validates if the user just login 
    { 
     //send them off to the login page 
     var url = new UrlHelper(filterContext.RequestContext); 
     var loginUrl = url.Content(“~/Usuario/Login”); 
     filterContext.HttpContext.Response.Redirect(loginUrl, true); 
    } 
    else 
    { 
     if (permission != “”) 
     { 
     //does some validations with “permission” 
     } 
    } 
} 

}

Thks!

+0

У вас ** есть ** для использования фильтра действий? Я могу опубликовать пример с использованием 'AuthorizeAttribute', который, похоже, будет лучше здесь. – webnoob

+0

@webnoob: 'AuthorizeAttribute' и' ActionFilterAttribute' оба являются 'FilterAttribute'. Те же самые принципы применимы к обоим. – StriplingWarrior

+0

@StriplingWarrior Упс, там снова идет эта терминология ... Спасибо. Я оставлю комментарий на месте, если кто-то еще запутался :) – webnoob

ответ

1

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

public class Authorise : AuthorizeAttribute 
{ 
    private readonly string _permissionSystemName; 

    public Authorise() 
    { 
    } 

    public Authorise(string permissionSystemName) 
    { 
     _permissionSystemName = permissionSystemName; 
    } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     //DO some logic and return True or False based on whether they are allowed or not. 

     return false; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary(
       new 
       { 
        area = filterContext.HttpContext.Request.RequestContext.RouteData.Values["area"], 
        controller = "Generic", 
        action = "PermissionDenied" 
       }) 
      ); 
    } 
} 

Usage бы вдоль линий:

[Authorise("SomePermissionName")] 
public class MyController : Controller 
{ 

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