2013-09-25 3 views
12

에서 AngularJS $ resource 요청 서버 측이 요청이 Angular (1.1.5) $ 리소스 요청인지 확인하는 방법이 있는지 확인하십시오. 나는이 요청 유형에 대해 "Request.IsAjaxRequest()"메소드를 찾고있다..NET MVC

overriden 된 AuthorizeAttribute의 HandleUnauthorizedRequest와 같이 찾고 있습니다. Ajax 또는 각색 요청 또는 그렇지 않은 경우 다른 json으로 컨텍스트 결과를 설정해야합니다.

+0

왜 간단한 시스템 토큰을 사용하지 않는 :이 경우에 나는 Accept 요청 헤더를 검사하는 것을 선호? 아니면 그냥 아약스 요청과 고전적인 MVC 요청 사이의 차이를 만들고 싶어? –

+1

그냥 json을 다시 보내거나 다른 MVC보기로 리디렉션 할 수 있도록 차이점을 알고 싶습니다. –

+0

MVC 메소드'Request.IsAjaxRequest'가 도움이되지 않습니까? – Chandermani

답변

35

MVC3을 잘 모르지만 AngularJS의 모든 요청에 ​​대해 맞춤 헤더를 설정할 수 있습니다.

그러면 서버 측에서이 헤더를 가져 와서 각도에 따른 요청으로 원하는 것을 수행해야합니다.

는 AngularJS와 사용자 지정 헤더 만이 수행해야합니다 : 사용하기 위해

angular.module('myModule', []) 

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

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

    }]) 

을 X-요청-으로 당신도이 작업을 수행해야합니다 :

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

이 그것은 더 이상 때문에 기본적으로 설정 아니에요 커뮤니티의 많은 부분이 CORS 요청을 가능하게하기 위해이 헤더를 삭제해야합니다.

+0

건배, 이것은 잘 작동합니다. . X-Requested-With로 전송되지 않는 이유를 알고 있습니까? –

+1

기본적으로 지금은 아니요 예 앞에 있습니다. https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d –

+0

답변을 편집했습니다 –

0

@ 토마스 폰스 응답이 좋으며 웹 기본값 인 AngularJS 요청을 표준으로 설정해야합니다. 에스. 그러나 대규모 어플리케이션의 경우, 여러 각도 모듈을 사용하여 각 모듈에 대해이를 설정하는 것이 번거로울 수 있습니다.

각도의 요청을 벗어난 JSON 응답으로 응답해야하는지 여부 만 확인할 필요는 없습니다.

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 
}