2014-09-24 1 views
0

에서 데이터를 가져 오기 :

웹 API 컨트롤러 포스트 방법이

과 같은
$scope.upload[index] = $upload.upload({ 
    url: settings.constants.uploadURL, 
    headers: { 'myHeaderKey': 'myHeaderVal' }, 
    data: { model: $scope.myModel }, 
    file: $file, 
    fileFormDataName: 'myFile' 
}).then(function (response) { ... 

public HttpResponseMessage Post() 
{ 
    return UploadFile(HttpContext.Current); 
} 

HttpContext에서 data : model을 어떻게 가져 옵니까 ??

+0

Post 메소드의 기존 매개 변수에 없습니다. – Thomas

답변

0

WebAPI는 그런 방식으로 사용하도록 설계되지 않았습니다. 특히 WebAPI 컨트롤러 메서드 내에서 HttpContext.Current을 참조하는 것은 대개 바람직하지 않습니다. 요청 또는 응답을 확인하려는 경우 ApiController 기본 클래스의 속성으로 참조해야합니다 (msdn docs 참조).

일반적으로 사람들은 이와 같은 상황에서 모델 바인딩을 선호합니다. 당신이 JS에 있다고 가정 : 당신은 C#에서 클래스를 선언해야

{ 
    foo: "bar" 
} 

그게 매핑 :

public HttpResponseMessage Post(MyRequestModel mdl) 
{ 
// do stuff, mdl.Foo will have "bar" in it magically 
} 

이 더 결과 :

public class MyRequestModel 
{ 
    public string Foo { get; set; } 
} 

그리고에 의해

이 API 메서드를 선언 자바 스크립트에서 C#으로 데이터를 전송하는 객체 지향적 인 방법. C#의 Foo 속성에 string 또는 int이 있거나 그 자체로 요청을 파싱하는 것과 반대되는 것으로 선언 한 항목이 있다고 보증 할 수 있으므로 형식이 더 안전합니다.

+0

감사합니다. 파일을 서버 및 BLOB 저장소에 업로드하는 데 사용되지만 데이터가있는 모델을 보내야합니다. 내가 설명한 솔루션을 시도해보십시오. –

+0

직렬화 된 모델과 함께 바이너리 데이터를 보낼 계획이라면 필자가 설명한 것보다 더 많은 작업을 수행해야합니다. 실제로 WebAPI의 기본 요청 스트림을 읽는 것은 상당히 복잡하지만 다음은 좋은 링크입니다. http://weblog.west-wind.com/posts/2013/Dec/13/Accepting-Raw-Request-Body-Content-with -ASPNET-Web-API – welegan

관련 문제