2016-07-31 63 views
0

当前查询Oracle数据库的Web API正在以下面的格式返回JSON中的结果。ASP.NET Web API将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属性的名称; in“{”data“:[{”CATEGORY“:”Internal Study“,”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对象的名称更改为'data' – jthomperoo

相关问题