2013-06-28 1 views
0

MVC 프로젝트에 웹 API 컨트롤러를 만들었습니다. 이 컨트롤러에 POST를 시도 할 때마다 파일 다운로드가 시작되며 그 이유는 확실하지 않습니다. URL을 통해 API 컨트롤러로 이동하거나 양식 게시를 통해 완료되면 발생합니다.웹 API 컨트롤러 POST가 클라이언트에서 파일 다운로드를 시도합니다.

게시물을 통해 파일을 업로드하는 것은 매우 간단한 시나리오입니다.

다음은 컨트롤러 코드입니다. 어떤 아이디어? 여기

public class UploadController : ApiController 
    { 

     public async Task<List<string>> Post() 
     { 
      // Verify that this is an HTML Form file upload request 
      if (!Request.Content.IsMimeMultipartContent("form-data")) 
      { 
       throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
      } 

      // Create a stream provider for setting up output streams that saves the output under c:\tmp\uploads 
      // If you want full control over how the stream is saved then derive from MultipartFormDataStreamProvider 
      // and override what you need. 
      MultipartFormDataStreamProvider streamProvider = new MultipartFormDataStreamProvider("c:\\tmp\\"); 

      var task = await Request.Content.ReadAsMultipartAsync(streamProvider); 

      return new List<string>(); 
     } 

클라이언트 코드 :

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>HTML5 Multiple File Upload Sample</title> 
</head> 
<body> 
    <form action="http://localhost:8080/api/upload" enctype="multipart/form-data" method="POST"> 
    What is your name? 
    <input name="submitter" size="40" type="text"><br> 
    What files are you uploading? 
    <input name="data" type=file multiple> 
    <br> 
    <input type="submit" /> 
    </form> 
</body> 
</html> 
+0

이 컨트롤러 작업을 어떻게 부르셨습니까? 문제가 서버가 아닌 클라이언트 코드에 있다고 의심됩니다. –

+1

목록을 반환하는 이유는 무엇입니까 ()? – bluetoft

+0

클라이언트 코드로 업데이트됩니다. 목록 반환 은 테스트 코드 일뿐입니다. – user1060500

답변

4

난 당신이 예제를 테스트하기 위해 Internet Explorer를 사용하는 것으로 의심, 당신은하지 않습니다? 그러나이 브라우저는 서버가 JSON을 전송할 때 항상 다운로드하라는 메시지를 표시합니다 (예 IE는 지옥처럼 싫증납니다. 웹 개발을 할 때 실제 웹 브라우저를 사용하십시오). 컨트롤러 액션은 IE가 인라인으로 표시 할 수 없다는 JSON을 반환하고 클라이언트에 저장하라는 메시지를 표시합니다. 내가 뭘 더 기대했는지 모르겠다. 컨트롤러 액션은 빈 배열을 JSON으로 반환합니다. 파일을 업로드 할 HTML 양식이 있고이 파일 업로드의 결과는 IE가 처리 방법을 모르는 빈 JSON 배열입니다.

HTML 클라이언트 양식을 사용하는 경우이 API 컨트롤러 작업에서 HTML을 반환하고 싶지 않을 수 있습니다.

+0

예. 당신은 절대적으로 옳았습니다. 다음과 같이 수정하면 의도 한대로 작동합니다. -> 공개 비동기 작업 Post() -> 새로운 HttpResponseMessage (HttpStatusCode.OK)를 반환; – user1060500

+0

REST 컨트롤러로, 컨트롤러 동작에서 HTML을 반환하는 것은 좋지 않습니다. 동의하셨습니까? 당신의 접근 방식은 무엇입니까? (참고로, 이것은 내 첫 번째 WebAPI/MVC 코드입니다.) – user1060500

관련 문제