2015-03-26 6 views
29

Aby dowiedzieć się więcej o nowym ekscytującym środowisku Asp.Net-5, staram się zbudować aplikację internetową za pomocą nowo wydanego programu Visual Studio 2015 CTP-6.Gdzie jest Request.IsAjaxRequest() w Asp.Net Core MVC?

Większość rzeczy wygląda naprawdę obiecująco, ale nie mogę znaleźć Request.IsAjaxRequest() - funkcji, z której korzystałem dość często w starszych projektach MVC.

Czy jest lepszy sposób na zrobienie tego - to spowodowało, że usunęli tę metodę - czy jest ona "ukryta" gdzieś indziej?

Dzięki za porady, gdzie można go znaleźć lub co zrobić!

+1

O ile wiem, wciąż tam jest. Jest to metoda rozszerzenia w 'System.Web.Mvc', klasa' AjaxRequestExtensions'. To dla MVC5, nie wiem o MVC6 ... –

+3

O tym właśnie OP mówi: MVC6. Oczywiście nadal tam jest w MVC5. –

+1

@ PatrykĆwiek OK, tak, testuję MVC6. Oczywiście mogę się mylić, ale wygląda na to, że brakuje go w pakiecie "Microsoft.AspNet.Mvc": "6.0.0-beta3" - lub innym standardowym pakiecie mvc-6, który jest dostarczany z nowym mvc-6 projekt. – mikal

Odpowiedz

59

Mam trochę mylić, ponieważ tytuł wspomniano MVC 5.

Szukaj Ajax in the MVC6 github repo doesn't give any relevant results, ale można dodać rozszerzenie siebie. Dekompilacji z projektem MVC5 daje dość prosty kawałek kodu:

/// <summary> 
/// Determines whether the specified HTTP request is an AJAX request. 
/// </summary> 
/// 
/// <returns> 
/// true if the specified HTTP request is an AJAX request; otherwise, false. 
/// </returns> 
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception> 
public static bool IsAjaxRequest(this HttpRequestBase request) 
{ 
    if (request == null) 
    throw new ArgumentNullException(nameof(request)); 
    if (request["X-Requested-With"] == "XMLHttpRequest") 
    return true; 
    if (request.Headers != null) 
    return request.Headers["X-Requested-With"] == "XMLHttpRequest"; 
    return false; 
} 

Od MVC6 Controller wydaje się być za pomocą Microsoft.AspNet.Http.HttpRequest, trzeba by sprawdzić request.Headers collection do odpowiedniego nagłówka poprzez wprowadzenie kilku poprawek do wersji MVC5:

/// <summary> 
/// Determines whether the specified HTTP request is an AJAX request. 
/// </summary> 
/// 
/// <returns> 
/// true if the specified HTTP request is an AJAX request; otherwise, false. 
/// </returns> 
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception> 
public static bool IsAjaxRequest(this HttpRequest request) 
{ 
    if (request == null) 
    throw new ArgumentNullException("request"); 

    if (request.Headers != null) 
    return request.Headers["X-Requested-With"] == "XMLHttpRequest"; 
    return false; 
} 

lub bezpośrednio:

+0

Kod źródłowy z wersji MVC5 jest tutaj: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/AjaxRequestExtensions.cs – Fred

+0

Dzięki, działa dla mnie . –

4

w rdzeniu asp.net, można użyć Context.Request.Headers.

bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest"