小编Dan*_*iel的帖子

可以使用C#MongoClient返回有效的JSON而无需先序列化为.NET类型吗?

我想让ASP.NET MVC将存储在MongoDB中的文档作为JSON返回,但不需要先将它序列化为.NET类型.但是,BSONDocument.ToJSON()返回如下所示的JSON:

    {_id:ObjectId("someid")}
Run Code Online (Sandbox Code Playgroud)

浏览器的JSON解析器不喜欢"ObjectId(nnn)",因此调用失败并出现解析器错误.我能够使用Regex hack获得可解析的JSON:

    public ActionResult GetFormDefinitionsJSON()
    {
        var client = new MongoDB.Driver.MongoClient(ConfigurationManager.ConnectionStrings["mongodb"].ConnectionString);
        var db = client.GetServer().GetDatabase("formthing");
        var result = db.GetCollection("formdefinitions").FindAll().ToArray();
        var sb = new StringBuilder();
        sb.Append("[");
        var regex = new Regex(@"(ObjectId\()(.*)(\))");
        var all = result.Select(x => regex.Replace(x.ToJson(), "$2"));
        sb.Append(string.Join(",", all));
        sb.Append("]");
        return Content(sb.ToString(), "application/json");
    }
Run Code Online (Sandbox Code Playgroud)

这将返回可解析的JSON:

   {_id:"someid"}
Run Code Online (Sandbox Code Playgroud)

但它闻起来.有没有办法没有正则表达式和字符串构建hackery来获取官方MongoDB驱动程序返回可以由浏览器解析的JSON?或者,我是否遗漏了浏览器端允许{_id:ObjectId("someid")}被解析为有效的内容?

c# asp.net-mvc json mongodb

4
推荐指数
1
解决办法
2050
查看次数

如何为 OData Api 提供自定义媒体类型格式

我正在开发一个使用 ODataApiController 的 ASP.NET 应用程序。该应用程序通过查询数据并将其显示在表格中来向用户显示网格。我希望能够导出为多种不同的格式,包括 CSV 和自定义 XML 格式。理想情况下,我只会采用网格使用的相同 OData 查询,设置 Accepts 标头,然后返回 CSV 或 XML。

我创建了 MediaTypeFormatters 来做我需要的事情,但它们只适用于“常规”ApiController,而不是 ODataApiController。查看 github 中的代码,我看到 OData 有自己的 MediaTypeFormatter 方案来处理各种情况,并内置了 XML 和 JSON 格式器。但我看不到如何挂钩以提供自定义格式。我曾尝试继承 ODataMediaTypeFormatter,但在其上设置的断点从未命中。

我只对这里的输出格式感兴趣。如何扩展 OdataApi 以输出不同的格式?

odata asp.net-web-api

4
推荐指数
1
解决办法
2365
查看次数

为什么此实体框架LINQ查询未导致SELECT DISTINCT?

给定实体:

[Table("Clients")]
public class Client
{
    [Column("txtClientId")]
    public string ClientId { get; set; }

    [Column("OrganizationName")]
    public string ClientName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和LINQ查询:

var clients = (from c in database.Clients
                where c.ClientId.Contains(term) || c.ClientName.Contains(term)                
                select c).Distinct();
Run Code Online (Sandbox Code Playgroud)

"客户端"的VS调试显示以下查询:

SELECT 
    [Extent1].[txtClientId] AS [txtClientId], 
    [Extent1].[OrganizationName] AS [OrganizationName]
FROM [dbo].[Clients] AS [Extent1]
WHERE ([Extent1].[txtClientId] LIKE @p__linq__0 ESCAPE N'~') OR 
    ([Extent1].[OrganizationName] LIKE @p__linq__1 ESCAPE N'~') 
Run Code Online (Sandbox Code Playgroud)

请注意,没有'Distinct'.我搜索过这个并找到了一些解决方法,比如分组,匿名类型,或者在代码中执行不同的操作(即ToList().Distinct()),但理想情况下,我想要SQL:

SELECT DISTINCT
    [Extent1].[txtClientId] AS [txtClientId], 
    [Extent1].[OrganizationName] AS [OrganizationName]
FROM [dbo].[Clients] AS [Extent1]
WHERE ([Extent1].[txtClientId] LIKE @p__linq__0 ESCAPE N'~') …
Run Code Online (Sandbox Code Playgroud)

c# sql linq-to-entities entity-framework distinct

2
推荐指数
1
解决办法
678
查看次数

检查我的 ionic 应用程序在 AppStore 和 PlayStore 上是否有新版本

我想向基于 Ionic 的应用程序添加功能,以检查相应的应用程序商店是否有更新版本,如果存在,则提示用户下载一次(不要重复 - 他们应该能够跳过并且不会被打扰)。与Siren类似,但适用于 Ionic 以及 Google Play 和 Apple App Store。我看到对本机应用程序和 AppStore 的类似请求以及对 Play Store 的类似请求,但没有任何特定于 Ionic 的请求。我觉得我可以使用应用程序版本和这些请求中列出的 ajax 调用将其缝合在一起,但必须有其他人已经这样做了,并且拥有现有的 Cordova/Capacitor 插件。此外,可能存在细微差别,即简单的解决方案可能会失败(即ajax调用失败、应用商店更改API、设备不支持更新版本等)。

是否有现有的插件或代码可以实现上述行为?

ionic-framework ionic-native

2
推荐指数
1
解决办法
3512
查看次数

单个Azure Web App的多个实例共享一个磁盘吗?

我正在开发Azure Web Apps(以前称为Websites)中的应用程序,并希望确定我了解本地磁盘在多实例场景中的使用方式.当我扩展到多个实例时,它们是否与所有应用程序文件共享一个虚拟磁盘?

考虑这个例子:

  • 在5个实例上运行的应用程序
  • 应用程序中的一个页面,它将文件上传到本地磁盘,比如Server.MapPath("〜/ Content")(我知道存储会更好,但只是为了概念)
  • 是否所有5个实例都可以访问此文件,还是仅存在于上载的实例上?

azure azure-web-sites

1
推荐指数
1
解决办法
1256
查看次数