2016-07-31 4 views
0

В настоящее время веб-API, который запрашивает Oracle DB, возвращает результат в JSON в следующем формате.ASP.NET Web API Return JSON как объект

[{"CATEGORY":"Internal Study","SESSION_NUMBER":7,"SESSION_START_DATE":"2015-02-13T00:00:00","SESSION_START_TIME":"2015-02-13T10:33:59.288394"}] 

Ниже приведен код, который мы используем

public class SampleController : ApiController 
{ 
    public HttpResponseMessage 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 STCD_PRIO_CATEGORY 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); 
    var response = Request.CreateResponse(HttpStatusCode.OK, selectResults,MediaTypeHeaderValue.Parse("application/json")); 
    ContentDispositionHeaderValue contentDisposition = null; 
    if (ContentDispositionHeaderValue.TryParse("inline; filename=ProvantisStudyData.json", out contentDisposition)) 
    { 
     response.Content.Headers.ContentDisposition = contentDisposition; 
    } 
    return response; 
} 
} 

Но клиент, который имеет сценарий, который потребляет файл говорит, что структура JSON является массивом вместо объекта дыры в безопасности.

{"data":[{"CATEGORY":"Internal Study","SESSION_NUMBER":7,"SESSION_START_DATE":"2015-02-13T00:00:00","SESSION_START_TIME":"2015-02-13T10:33:59.288394"}]} 

Я новичок в этой структуре JSON и не знаю, как мы будем управлять возвращаемые данные в качестве объекта в JSON файл

+0

Что вы подразумеваете под «клиентом» здесь? Кто сказал, что это дыра в безопасности? – DavidG

+0

Я вижу, что верхний - это возвращенный, теперь нижний - это то, что вы хотите: P Отверстие в безопасности - это то, что массив JSON верхнего уровня может быть захвачен, поскольку он является действительным сценарием JavaScript, где в качестве объекта JSON нет , – starlight54

+0

@ starlight54 Вы уверены? http://stackoverflow.com/questions/16289894/is-json-hijacking-still-an-issue-in-modern-browsers – DavidG

ответ

4

Я не слышал о какой-либо проблеме безопасности вокруг массива в формате JSON однако, если вам нужно, чтобы преобразовать его в объект JSON можно использовать общий объект, который вы определяете:

var returnObject = new 
{ 
    selectResults = selectResults 
}; 

Это добавит объект JSON оберточной вы хотите на ответ, который вы можете использовать этот код постройте свой ответ:

var response = Request.CreateResponse(HttpStatusCode.OK, returnObject,MediaTypeHeaderValue.Parse("application/json")); 

Извините, если я неправильно понял, о чем вы просите - надеюсь, что это помогает/работает.

+0

Спасибо. Но присваиваем ли мы selectResults себе? Также он говорит, что тип ожидается в новом() – trx

+0

Извините, код, который я предоставил, имел в нем дополнительный «()» после «нового» - это не требуется; Я исправил свое решение, чтобы исправить это, и теперь он должен работать, я сам это проверил. Также - «selectResults», которому назначается новый объект, будет имя свойства JSON; в «{« данных »: [{« КАТЕГОРИЯ »:« Внутреннее исследование »,« SESSION_NUMBER »: 7,« SESSION_START_DATE »:« 2015-02-13T00: 00: 00 »,« SESSION_START_TIME »:« 2015-02-13T10 : 33: 59.288394 "}]}" он будет в позиции тега 'data'. – jthomperoo

+0

Практически там, чтобы изменить имя на данные, измените свой код на следующий: var returnObject = new {data = selectResults}; это изменит имя объекта JSON на «данные», – jthomperoo