إعادة توجيه إلى وحدة تحكم وإجراءات محددة في مرشح عمل ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/1490401

سؤال

لقد كتبت مرشح عمل يكشف عن جلسة جديدة ومحاولات إعادة توجيه المستخدم إلى صفحة لإبلاغهم بأن هذا قد حدث. المشكلة الوحيدة هي أنني لا أستطيع معرفة كيفية إعادة توجيهها إلى تحرير وسرد تحكم / إجراء في عامل تصفية إجراء. يمكنني بدلا من ذلك معرفة كيفية إعادة توجيه عنوان URL محدد. هل هناك طريقة مباشرة للإعادة توجيه إلى تحرير وسرد تحكم / إجراء في عامل تصفية إجراء في MVC2؟

هل كانت مفيدة؟

المحلول

بدلا من الحصول على مرجع إلى HttpContent وإعادة التوجيه مباشرة في ActionFilter، يمكنك ضبط نتيجة سياق المرشح ليكون RedirectoreToresulesules. إنه منظف بعض الشيء وأفضل لاختبار.

مثله:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if(something)
    {
        filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary {{ "Controller", "YourController" },
                                      { "Action", "YourAction" } });
    }

    base.OnActionExecuting(filterContext);
}

نصائح أخرى

تحرير: كان السؤال الأصلي حول كيفية اكتشاف تسجيل الخروج من الجلسة، ثم إعادة توجيه تلقائيا إلى وحدة تحكم وإجراءات محددة. أثبتت السؤال أكثر فائدة بشكل أكبر كما هو الشكل الحالي.


انتهى بي الأمر باستخدام مجموعة من العناصر لتحقيق هذا الهدف.

الأول هو جلسة تنتهي صلاحيته وجدت هنا. وبعد ثم أردت بشكل متسق لتحديد وحدة التحكم / الحركة التحرير والسرد للحصول على عنوان URL إعادة توجيه، والتي وجدت الكثير من الأمثلة على هنا. وبعد في النهاية جئت مع هذا:

public class SessionExpireFilterAttribute : ActionFilterAttribute
{
    public String RedirectController { get; set; }
    public String RedirectAction { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext ctx = HttpContext.Current;

        if (ctx.Session != null)
        {
            if (ctx.Session.IsNewSession)
            {
                string sessionCookie = ctx.Request.Headers["Cookie"];
                if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    UrlHelper helper = new UrlHelper(filterContext.RequestContext);
                    String url = helper.Action(this.RedirectAction, this.RedirectController);
                    ctx.Response.Redirect(url);
                }
            }
        }

        base.OnActionExecuting(filterContext);
    }
}

يتصل إعادة التوجيه استخدام هذا الزائد:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    RouteValueDictionary routeValues
)

في مرشحات العمل، القصة مختلفة قليلا. مثال جيد، انظر هنا

http://www.dotnetspider.com/resources/29440-asp-net-mvc-action-filters.aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top