2013-09-25 69 views
12

có cách nào để biết yêu cầu là một yêu cầu tài nguyên $ Angular (1.1.5) $ hay không. Tôi đang tìm kiếm một phương thức "Request.IsAjaxRequest()" cho loại yêu cầu này.

Tôi đang tìm kiếm điều này như trong HandleUnauthorizedRequest của một AuthorizeAttribute overriden Tôi cần phải thiết lập kết quả bối cảnh cho một số json nếu một Ajax hoặc góc yêu cầu hoặc cái gì khác nếu không.

+0

Tại sao không sử dụng mã thông báo hệ thống đơn giản? Hoặc bạn chỉ muốn tạo sự khác biệt giữa yêu cầu ajax và yêu cầu mvc cổ điển? –

+1

Chỉ cần tìm hiểu sự khác biệt để tôi có thể gửi lại json hoặc chuyển hướng đến một chế độ xem mvc khác. –

+0

Phương thức MVC 'Request.IsAjaxRequest' có giúp ích gì không? – Chandermani

Trả lời

35

Tôi không biết rõ MVC3 nhưng bạn có thể đặt tiêu đề tùy chỉnh cho tất cả yêu cầu từ AngularJS.

Sau đó, ở phía máy chủ, bạn chỉ cần có được tiêu đề này và thực hiện những gì bạn muốn với yêu cầu từ góc cạnh.

Để có tiêu đề tùy chỉnh trong AngularJS chỉ làm điều này:

angular.module('myModule', []) 

    .config(['$httpProvider', function($httpProvider) { 

     $httpProvider.defaults.headers.common["FROM-ANGULAR"] = "true"; 

    }]) 

Để sử dụng X-yêu cầu-Với bạn phải làm điều này quá:

$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 

Nó không được thiết lập theo mặc định nữa vì một phần rất nhiều của cộng đồng phải xóa tiêu đề này để kích hoạt yêu cầu CORS

+0

Chúc mừng, điều này hoạt động tốt, mặc dù ban đầu tôi đã hi vọng có một tiêu đề đã có trong đó tôi có thể kiểm tra . Bạn có biết tại sao nó không được gửi với X-Requested-With? –

+1

Theo mặc định, bây giờ không có trước khi có. https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d –

+0

Tôi đã chỉnh sửa câu trả lời –

0

@Thomas Câu trả lời của Pons là tốt và làm cho các yêu cầu về mặc định của Web là AngularJS. S. Nhưng đối với ứng dụng lớn, với một số mô-đun góc, tôi thấy nó cồng kềnh để thiết lập cho mỗi mô-đun.

Không chỉ vậy, nhưng có thể bạn cần kiểm tra xem bạn có nên trả lời bằng phản hồi JSON ngoài yêu cầu của góc không. Trong trường hợp đó, tôi muốn kiểm tra tiêu đề yêu cầu Accept:

var accepted = HttpContext.Request.Headers["Accept"].Split(','); 

if (accepted .Any(x => x == "application/json")) 
{ 
    // Send your JsonResult here 
} 
else 
{ 
    // Send your Html/Content result here 
}