public async IActionResult Post([FromBody]XDocument xml)
{
var entity = new MyDocument();
entity.Xml = xml.ToString(); //??
db.Documents.Add(entity);
db.SaveChanges();
return Created();
}
public async Task<IActionResult> Get(int id)
{
var entity = db.Documents.Find(id);
return Content(entity.Xml, "application/xml"); //missing xml declaration
}
var xml = XDocument.Load(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Root><Child>Content</Child></Root>");
xml.ToString(); //<Root><Child>Content</Child></Root>
很容易包括它,但我认为这可能是有原因的。
当响应不包括XML声明时,Edge浏览器不显示XML:
public IActionResult Get()
{
return Content("<Root><Child>Content</Child></Root>", "application/xml")
}
当响应包含xml声明,但声明中的编码与响应编码不匹配时,它也会以“无法切换编码”而失败:
public IActionResult Get()
{
return Content(@"<?xml version=""1.0"" encoding=""utf-8""?>
<Root><Child>Content</Child></Root>", "application/xml");
}
public IActionResult Get()
{
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<Root><Child>Content</Child></Root>")
var xmlDoc = XDocument.Parse(xml);
return Content(xml, "application/xml", Encoding.GetEncoding(xmlDoc.Declaration.Encoding));
}
我将这些规则确定为最佳实践:
>
不应将XML编码存储在数据库中
很明显,您不想将编码存储在数据库中,因为数据库本身就威胁到XML列。但是,将XML声明存储在数据库中是有意义的,因为它可以包含其他信息(版本、独立)。
您的REST服务应该始终在响应中返回XML声明。如果它不存储在数据库中,您可以在运行时构造它。
public async IActionResult Post([FromBody]XDocument xml)
{
var entity = new MyDocument();
var declarationWithoutEncoding = new XDeclaration(xml.Declaration?.Version, null, xml.Declaration?.Standalone);
entity.Xml = $@"{declarationWithoutEncoding}\n\r{xml.ToString()}"
db.Documents.Add(entity);
db.SaveChanges();
return Created();
}
public async Task<IActionResult> Get(int id)
{
var entity = db.Documents.Find(id);
return Content(entity.Xml, "application/xml"); //in case XML Declaration is in database
}
或者
public async Task<IActionResult> Get(int id)
{
var entity = db.Documents.Find(id);
XDocument xmlDoc = XDocument.Parse(entity.xml);
var declaration = new XDeclaration(xml.Declaration?.Version ?? "1.0", null, xml.Declaration?.Standalone ? "no");
//you may change enccoding information to match response encoding, or just skip it
//declaration.Encoding = ...
string xml = $@"{declaration}\n\r{xml.ToString()}"
return Content(xml, "application/xml");
}
数据是非常小的,就像水果的列表,不会经常改变,也只有一个服务将使用这个数据和服务到其他服务,请提到您的方法的优点和缺点。
问题内容: 默认情况下,Python 3对源代码文件使用UTF-8编码。我仍应在每个源文件的开头使用编码声明吗?喜欢 问题答案: 因为默认 值为 UTF-8,所以仅在偏离默认值时或者在依赖其他工具(例如IDE或文本编辑器)来使用该信息时,才需要使用该声明。 换句话说, 就Python而言 ,仅当您要使用不同的编码时,才需要使用该声明。 其他工具(例如您的编辑器)也可以支持类似的语法,这就是PEP
我在这里试图得到两个非常相似的问题的答案: 我是否应该在存储库对象中将实体转换为DTO,并将其返回到服务层? 其中是一个注释类-这似乎是我不应该做的第一件事,因为服务层现在知道了一个非常低级别的对象,它违反了在每一层抽象数据的尝试。 如果我将每个转换为,情况就不是这样了--但是我应该这样做吗? 基本改变: 但这对我来说不是最好的解决办法…我在这里能做什么? 要提到的一件重要事情是,它来自GWT项目
我目前正在构建一个项目,其中我需要为每个用户保存一个字符串列表(他阅读的文章的网址)。 我正在使用带有sqlite的python烧瓶SQLalchemy。 我知道sqlite不支持数组,所以我正在考虑切换到另一个数据库,而不是sqlite,一个支持数组的数据库。 我想知道你会怎么做?哪个数据库支持数组,或者是否有更好的解决方法。
我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?
问题内容: 我正在使用ExpressJS,Mongodb(Mogoose)构建应用程序。应用程序包含访问用户之前必须对其进行身份验证的路由。 目前,我已经编写了一个快速的中间件来做同样的事情。在这里,借助JWT令牌,我正在进行mongodb查询以检查用户是否已通过身份验证。但是感觉这可能会在我的数据库上增加不必要的请求负载。 我应该针对此特定任务集成redis吗? 会改善API性能吗?还是应该继续