ASP.NET 웹 API로 구현 된 서비스에 CSV 내보내기를 추가하고 있습니다.ASP.NET 웹 API를 사용하여 내 보낸 파일 다운로드
현재 ajax POST 요청을 통해 웹 API 컨트롤러로 전송되는 뷰 모델 (결과 필터링 정보 포함)이 있습니다. 그러면 UI에서 JSON 응답이 렌더링됩니다. 이것은 잘 작동합니다.
이제 다른 컨트롤러에 동일한보기 모델을 게시하고 싶습니다. 이름을 ExportController
으로 지정하겠습니다. 그런 다음 파일을 사용자에게 다운로드해야합니다.
내 생각 :
사후 서비스에 뷰 모델은 영구 저장소에 어딘가에 저장 (DB 또는 메모리 내 캐시, 중요하지 않습니다) 및 사용자에게 수출 토큰을 반환합니다.
는 다음 URL 에 그 토큰과
iframe
에서GET
요청을 실행하고이 요청에 대한 응답으로 파일을 가져 (수출 토큰 나는이 특정 수출을 식별하는 데 사용되는 정보의 조각을 의미). UI에 내가 지금 무엇을 가지고
:
여기var exportUrl = "URL to ExportController"
$.ajax(exportUrl, {
type: 'POST',
contentType: 'application/json',
data: postData
})
.success(function(data) {
// this should download the file
$('#export').attr('src', exportUrl + '&exportToken=' + data);
});
'#export가'파일을 다운로드하는 데 사용되는 iframe
요소입니다.
public class ExportController : ApiController
{
...
// GET /api/Export
public string Get(string exportToken)
{
// get filters from DB
var filters = ExportArgumentProvider.GetFilters(exportToken);
// get data
var result = DataSource.GetData(filters);
return result;
}
// POST /api/Export
public string Post(FilterInput filters)
{
var guid = Guid.NewGuid();
// save filters to DB
ExportArgumentProvider.AddFilter(guid, filters);
return guid.ToString();
}
}
이 의사 코드는 분명히 작동하지 않습니다, Get 메서드의 반환 형식을 무시하십시오 여기
그리고
수출 백엔드의 원시 스케치입니다. 그래서질문 :
- 는 (DB에서 필터 상태를 저장하지 않고)이 수출을 할 수있는 쉬운 방법이있다.
- 이 접근법이 제정신입니까? (DB에 상태가 저장되어 있습니까?) 그런 작업이 다른 방식으로 수행되어야합니까?
- ASP.NET 웹 API는 이러한 작업에 적합합니까? 아니면 일반적인 ASP.NET 컨트롤러를 사용해야 내 보내야합니까?
UPDATE : 서버에 게시 된 데이터가 너무 GET 요청을 통해 전달, URL의 아이폰에 제한을 초과 할 수는 정말 옵션이 아닙니다.
postData'가 충분히 작지 않다'는 사실은 모든 문제의 열쇠 :( –
당신은 당신의 iframe이있을 수 있습니다 당신을 위해 게시물을 여전히 모든 것을 함께 "결합"엔드 포인트 거래를해야합니다. – Chris
정확히 어떻게 그것은 구현됩니까? –