我正在尝试使用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年开始的,所以我怀疑这就是为什么他们不起作用。有什么更新方法可以解决这个问题?
答案 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;
};