在NancyFX中返回或修改.json文件

时间:2018-04-17 09:31:51

标签: c# asp.net nancy

我正在尝试使用ASP.NET托管的NancyFX构建一个简单的API。调用http://myapp/api/get时,它应返回一些存储在名为“data.json”的文件中的JSON,该文件与主模块一起存储在根级别。此外,http://myapp/api/set应设置JSON文件的内容。

我最初的做法是:

Get["/api/get"] = _ =>
{
  string allText = System.IO.File.ReadAllText(@"c:\data.json");
  object jsonObject = JsonConvert.DeserializeObject(allText);
  return jsonObject;
}

Post["/api/set"] = parameters =>
{
  string json = JsonConvert.SerializeObject(parameters);
  System.IO.File.WriteAllText(@"c:\data.json", json);
  return HttpStatusCode.OK;
}

但是,程序无法在运行时找到该文件。在这里阅读了一些答案之后,我尝试了以下操作(这也没有用):

Get["/api/get"] = _ =>
{
  return new GenericFileResponse(Directory.GetCurrentDirectory() + @"\sitefiles\data.json", "application/json");
}

我找到的答案是从2011年开始的,所以我怀疑这就是为什么他们不起作用。有什么更新方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

经过多一点工作后,我找到了解决方案。您必须创建一个表示您将要接收的数据的类模型,在这种情况下,该模型称为InfoModel。然后我将Get和Post编码为:

Get["/api/get"] = _ =>
{
  DefaultRootPathProvider pathProvider = new DefaultRootPathProvider();
  return new GenericFileResponse(pathProvider.GetRootPath() + "data.json", "application/json");
};

Post["/api/set"] = parameters =>
{
  DefaultRootPathProvider pathProvider = new DefaultRootPathProvider();
  var model = this.Bind<InfoModel>();
  string json = JsonConvert.SerializeObject(model);
  File.WriteAllText(pathProvider.GetRootPath() + "data.json", json);
  return HttpStatusCode.OK;
};