2012-10-15 48 views
9

içinde PartialView veya AJAX isteği olup olmadığını belirleme Bir web sitesinin kullanıcılarına erişim hakları vermeliyim. Burada filtreleme yapıyorum:İstek, ASP.NET MVC 3

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
} 

sorun böyle PartialViewRequests gelen 'Index' ya da AJAX olarak tam Görünüm isteğini ayırt edemezler isteklerini çağırır.

Bu sayfa 'Index' sayfasını kullanabilir ama 'PartialViewGridViewForIndex' erişim hakkına sahip değildir.

Özellik ControllerContext.IsChildAction, ya da yardımcı olmuyor. AJAX isteği bu kontrol işlemi başlatmak için kullanılıyorsa,

cevap

31

belirlemek için IsAjaxRequest uzatma yöntemi kullanabilir:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.IsAjaxRequest()) 
    { 
     // the controller action was invoked with an AJAX request 
    } 
} 
+0

teşekkür ederiz olarak kullanabilirsiniz! Çalışıp çalışmadığını görmek için şimdi test ediyorum. geri bildirim ile geri geleceğim. –

+0

Test ettim ve işe yarıyor. Bununla birlikte, kısmi görünüm oluşturma işleminin AJAX talebi ile yapıldığını kendime sormak istemem. Herhangi bir ideea var mı? –

+0

"IsAjaxRequest", mevcut isteğin bir AJAX isteği olup olmadığını söyler. –

0

I AuthorizeAttribute uzatarak bir Yetkilendirme filtresi oluşturur. Daha sonra kodumu OnAuthorize geçersiz kılma içine koyardım. FilterContext nesnesinde FilterContext.ActionDescriptor.MethodInfo.ReturnType.Name'a bakabilirsiniz. Kısmi görünüm için bu PartialViewResult olacaktır.

0

Sen

altına
public static class HttpRequestExtensions 
{ 
    private const string RequestedWithHeader = "X-Requested-With"; 
    private const string XmlHttpRequest = "XMLHttpRequest"; 

    public static bool IsAjaxRequest(this HttpRequest request) 
    { 
     if (request == null) 
     { 
      throw new ArgumentNullException("request"); 
     } 

     if (request.Headers != null) 
     { 
      return request.Headers[RequestedWithHeader] == XmlHttpRequest; 
     } 

     return false; 
    } 
} 

olarak asp.net Core 2 yılında HttpRequestExtensions uzatmak Ve

if (!Request.IsAjaxRequest()) 
{ 
    //---- 
    } 
    else 
    { 
     // ------- 
    }