2016-07-25 1 views
0

ASP .NET WEB API에서 반환되는 파일의 이름을 설정하려고합니다. 현재 URL에서 전달되는 매개 변수의 이름으로 반환됩니다. 하지만 그때 필요하면 것은 내가 내용 - 처리하여 다른 포럼에보고했다 ASP .NET 웹 API에 의해 반환 된 파일 이름 설정

public class NewTestController : ApiController 
{ 
public string Getdetails([FromUri] string[] id) 
{using (OracleConnection dbconn = new OracleConnection("DATA SOURCE=J;PASSWORD=C;PERSIST SECURITY INFO=True;USER ID=T")) 
    { 
     var inconditions = id.Distinct().ToArray(); 
     var srtcon = string.Join(",", inconditions); 
     DataSet userDataset = new DataSet(); 
     var strQuery = @"SELECT 
         * from STPR_STUDY where STPR_STUDY.STD_REF IN (" + srtcon + ")"; 
     OracleCommand selectCommand = new OracleCommand(strQuery, dbconn); 
     OracleDataAdapter adapter = new OracleDataAdapter(selectCommand); 
     DataTable selectResults = new DataTable(); 
     adapter.Fill(selectResults); 
     return JsonConvert.SerializeObject(selectResults); 
}}} 

ABC.JSON

로 반환되는하지만 코드에서 HttpResponse에를 사용하고 있지 않다. 이것을 어떻게 할 수 있는가? 감사합니다

나는 아래

OracleCommand selectCommand = new OracleCommand(strQuery, dbconn); 
      OracleDataAdapter adapter = new  OracleDataAdapter(selectCommand); 
      DataTable selectResults = new DataTable(); 
      adapter.Fill(selectResults); 
      string result = JsonConvert.SerializeObject(selectResults); 
      HttpResponseMessage response = new HttpResponseMessage(); 
      response.StatusCode = HttpStatusCode.OK; 
      response.Content = new StreamContent(result); 
      response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
      { 
       FileName = "Abc.JSON" 
      }; 
    return(result); 

같은 시도하지만 StreamConent에서 일부 잘못된 인수가 들어 최고의 오버로드 된 메서드의 일치라고 StreamContent에 오류가 발생

당신은 같은 요청 객체의 CreateResponse 방법을 사용할 수 있습니다
+1

컨트롤러에서 '문자열'을 반환합니다. 최소한 'IHttpActionResult'를 사용해야하지만 파일 이름을 설정하는 데 더 좋은'HttpResponseMessage'를 사용해야합니다. –

+0

Teo van kot, HTTPResponseMessageand를 사용하여 시도해 보았습니다. StreamConent에서 잘못된 인수가있는 경우에 대한 오버로드 된 가장 좋은 메서드에서 오류가 발생했습니다. 내 첫 웹 API를 만들었습니다 – trx

+0

직렬화 된 DataTable을 반환하는 것은 API에서 의미가 없습니다. 클라이언트 측에서 얻고 자하는 최종 결과는 무엇입니까? – Win

답변

1

public HttpResponseMessage Get() 
    { 
     string fileName = "abc.json"; 
     return Request.CreateResponse(HttpStatusCode.OK, fileName); 
    } 

편집 아래 1 :

string contentDisposition = "inline; filename=abc.json"; 
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, byteInfo, MediaTypeHeaderValue.Parse("application/json")); 
    response.Content.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse(contentDisposition); 
    return response; 
+0

그러나 DataTable을 JSON으로 변환 중입니다. 그러므로 나는 그들을 끈으로 돌려 보내지 않을 것이다. 나는 미안하다, 나는 새롭고 거의 붙어 있지 않다. – trx

+0

문자열 인 경우에도 HttpResponseMessage를 사용하여 클라이언트에 데이터를 반환해야합니다. 도움이 필요하면 클라이언트 측에서 사용하는 방법 – Paresh

+0

'DataTable selectResults = new DataTable(); adapter.Fill (selectResults); string result = JsonConvert.SerializeObject (selectResults); HttpResponseMessage 응답 = 새 HttpResponseMessage(); response.StatusCode = HttpStatusCode.OK; var fileName = "abc.json"; return Request.CreateResponse (HttpStatusCode.OK, fileName); ' 이 코드를 시도하고 ABC.JSON으로 내부 데이터로 NewTest.JSOn 파일을 엽니 다. 그것은 원래의 데이터를 반환하지 않습니다 – trx

관련 문제