小编Ray*_*lli的帖子

WCF数据服务(OData)与ASP.NET Web API

我正在设计一个分布式应用程序,它将包含RESTful服务和各种客户端(Silverlight,iOS,Windows Phone 7等).现在我正在确定应该使用哪种技术来实现我的服务,WCF数据服务(OData)或ASP.NET MVC 4推出的新ASP.NET Web API.

我在网上看了几个关于每个的演示文稿,现在我倾向于WCF数据服务,主要是因为URI内置的过滤机制和本机超媒体功能.我能看到的唯一缺点是Atom Pub规范的详细程度与POX相反.

在作出决定之前,我对这两项技术有什么了解吗?为什么有人会选择基于WCF数据服务的ASP.NET Web API?

rest wcf wcf-data-services odata asp.net-web-api

87
推荐指数
6
解决办法
4万
查看次数

在每个单元测试之前重新创建和重新设置LocalDb

我正在尝试为我的ASP.NET Web API项目编写单元/集成测试,并努力孤立地运行每个测试.请允许我解释一下.

我有一个配置了部署设置的*.testsettings文件.在每次测试运行之前,将一个空的*.mdf文件部署到测试位置.由于我正在使用实体框架代码优先,我可以使用数据库初始化程序将我的模式推送到数据库并为2行播种特定的表.这非常有效.

我面临的问题是,如果他们以错误的顺序执行,我所有ApiControllers操作的各种测试都会踩到彼此的脚趾上.例如,如果我在POST测试之前运行GET测试,那么GET返回2个对象,如果它们以相反的顺序运行,则GET返回3个对象.

我认为我需要做的是在每次测试之前删除,重新创建和重新设置我的数据库.这是个好主意还是有更好的方法?如果这是我能做的最好的,我会在每次测试之前重新设置数据库.

unit-testing entity-framework ef-code-first asp.net-web-api localdb

13
推荐指数
2
解决办法
8772
查看次数

当用户在收到响应之前导航时,ASP.NET MVC控制器会发生什么?

我有一个AJAX操作,可能需要几分钟才能完成,具体取决于所涉及的数据量.如果用户在此操作仍在运行时感到沮丧并导航,控制器会发生什么?它还是完整的吗?是否知道应该放弃请求并处理控制器对象?

c# asp.net asp.net-mvc asp.net-mvc-4

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

如何将自定义模型活页夹与Swashbuckle,Swagger和NSwag一起使用?

我有一个包含以下端点的ASP.NET Core Web API。

[HttpGet]
[Route("models/{ids}")]
[Produces(typeof(IEnumerable<Model>))]
public IActionResult Get
(
    [ModelBinder(typeof(CsvModelBinder<string>))] IEnumerable<string> ids
)
{
    // Get models

    return Ok(models);
}
Run Code Online (Sandbox Code Playgroud)

该端点获取一个ID的CSV列表(例如/models/a,b,c),并返回相应Model对象的JSON数组。 CsvModelBinder<string>IModelBinder我编写的自定义实现,该实现将Ids的CSV列表拆分为IEnumerable<string>,我可以在查询中使用它来查找对象。这一切都很好。

我现在想做的是使用NSwag生成客户端库,但这被证明是有问题的,因为Swashbuckle生成的Swagger将ids参数描述为IEnumerable<string>,而不是string

选项A:有没有办法告诉Swashbuckle将参数描述为a string而不是as IEnumerable<string>

选项B:有没有办法告诉NSwag IEnumerable<string>在生成请求URL时应将此参数编组为CSV?

c# swagger swashbuckle asp.net-core nswag

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

使用ASP.NET Web API和实体框架进行API版本控制

我正在使用ASP.NET Web API,Code-First Entity Framework 5和SQL Server 2012开发REST API,我需要能够对API进行版本控制.我已经阅读了一些博客文章和文章,关于在URI或自定义HTTP标头中指示API版本,并使用自定义IHttpControllerSelector根据指定的版本选择不同的ApiControllers.这一切都有道理.

我正在努力弄清楚的是如何管理Web API层以外的版本控制的影响,特别是在Entity Framework中.如何在不破坏旧版本API的情况下改进我的DbContext?我也可以对DbContext进行版本控制吗?如果是这样,怎么样?

versioning rest entity-framework asp.net-web-api

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

如何在 C# 中为泛型类型创建 Avro 模式?

我正在使用 Kafka 和Confluent 的 .NET 客户端开发 .NET Standard pub/sub 包。我的制作人有以下界面。

IEventPublisher.cs

public interface IEventPublisher<T>
{
    bool Publish(Event<T> evnt);
}
Run Code Online (Sandbox Code Playgroud)

我的KafkaEventPublisher<T>类实现了这个接口,并且正在发布的有效负载 T 被包裹在一个Event<T>信封中。

事件.cs

public class Event<T>
{
    // Some other properties 

    public T Payload { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的组件的初始实现不使用 Avro 序列化程序或架构注册表。它Event<T>使用 JSON序列化并将Newtonsoft.Json字符串生成到 Kafka 主题。这样做的好处是有效载荷实际上可以是任何对象。主题名称是对象的完全限定类名称,因此主题保证是同类的。缺点是有效载荷对 Kafka 是不透明的。

我现在正致力于从Newtonsoft.JsonAvro 和架构注册表转换。这似乎表明我的模型不能再是任何东西了。它们必须专门编写以通过实现ISpecificRecord接口来允许 Avro 序列化。如果这是真的,这并不理想,但我可以接受。

我似乎无法弄清楚的问题是如何将Event<T>信封合并到 Avro 模式中。有没有办法将模式嵌套在另一个模式中?我所有的具体模式都应该定义Event<T>信封吗?GenericRecord改用并尝试在运行时使用反射自动生成模式是否明智,这样我的组件就可以重新接受任何对象作为有效负载?

.net c# avro apache-kafka confluent-platform

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

使用VS 11,.NET 4.5和Entity Framework时生成错误

在Visual Studio 2010中,我的解决方案是使用.NET 4.2(实体框架2011年6月CTP),因此我可以在实体框架中使用空间类型.当我升级到Visual Studio 11 Beta时,由于4.2和4.5框架之间的冲突而无法构建,因此我卸载了4.2.现在我在构建时遇到此错误:

错误209:当前,仅当在具有UseStrongSpatialTypes注释且其根Schema元素上具有false值的CSDL文件中使用时,才支持空间类型.

任何人都知道这意味着什么,我能做些什么呢?谷歌的收益率几乎为零......

entity-framework spatial visual-studio .net-4.5 visual-studio-2012

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

如何使用Identity Server实现SSO?

我有许多使用 .NET 成员身份和表单身份验证的旧版 .NET Framework Web 应用程序。他们各自拥有自己的登录页面,但都位于同一域(例如 .mycompany.com),共享 ASP.NET 会员数据库并共享机器密钥,以便他们能够识别彼此的 cookie 以实现 SSO;即,如果您登录一个应用程序,那么您就登录了所有应用程序,与注销相同。

现在我希望所有未来的应用程序都在 .NET Core 中开发,并使用通用的 Identity Server 作为集中式身份验证机制。我启动并运行了一个简单的 Identity Server,以及几个不同风格的 .NET Core 客户端应用程序。这一切都非常有效。我似乎无法克服的障碍是所有 mycompany.com 应用程序之间的 SSO。布罗克·艾伦(Brock Allen)在此建议我查看客户样本以获取灵感。

MVC OWIN Client(隐式)示例让我了解了大部分内容。我可以将旧版应用程序移植到使用 OWIN cookie 身份验证和 OIDC,但这不是真正的 SSO。目前,如果我登录 app1.thirdparty.com,则会被重定向到 Identityserver.mycompany.com 进行身份验证。登录到 Identityserver.mycompany.com 后,我可以访问 app1.thirdparty.com,这很棒,但我还必须对每个 mycompany.com 应用程序执行相同的过程。当然,我不必每次都输入凭据,因为我已经与 Identityserver.mycompany.com 建立了会话,但在正式登录之前,我仍然必须转到每个应用程序并单击登录按钮。我更喜欢登录到 Identityserver.mycompany.com 来启动与 mycompany.com 域内的所有其他应用程序的 SSO。同样,如果我已经登录到 mycompany.com 应用程序,那么我希望 Identityserver.mycompany.com 能够意识到这一点,并且不需要我再次输入我的凭据。

这可能吗?我该怎么办呢?

single-sign-on owin asp.net-identity openid-connect identityserver4

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

如何在我的自定义集合中模仿IQueryable <T> .Include(Expression <Func <T,TProperty >> path)的功能?

首先,一点背景.我正在使用ASP.NET Web API和Entity Framework 5开发REST API,但是系统的要求是我的ApiControllers和我的DbContext之间存在多层逻辑.逻辑的这些层包括分离从我的DbContext实体,在内存应用组假想变为实体(一个过程.我打电话物化的改变一套),然后让用户检查系统应这些变化得到的新状态应用.实体的新状态不会立即保存到数据库中.相反,实现在Web服务器的内存中保存,用户可以检查当前数据或各种更改集的许多实现之一.

现在我的问题.

public interface IIdentifiable
{
    long Id { get; set; }
}

public class Foo : IIdentifiable
{
    public long Id { get; set; }
    public string Name { get; set; }
    public List<Bar> Bars { get; set; } // Navigation Property
}

public class Bar : IIdentifiable
{
    public long Id { get; set; }
    public string Name { get; set; }
    public long FooId { get; set; } // Foreign …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression

5
推荐指数
0
解决办法
579
查看次数

如何在 CDK 应用程序中获取 RDS 实例主机名?

我正在使用适用于 .NET 的 AWS CDK 创建一个堆栈,该堆栈由 ECS 中的 VPC、RDS 数据库实例和应用程序负载平衡 Fargate 服务组成。我部署到 ECS 的容器需要通过环境变量设置 RDS 数据库的连接信息,但我不确定如何访问该信息。下面是我的 CDK 代码。

using Amazon.CDK;
using EC2 = Amazon.CDK.AWS.EC2;
using ECS = Amazon.CDK.AWS.ECS;
using RDS = Amazon.CDK.AWS.RDS;

namespace PersonalSecOps
{
    public class PersonalSecOpsStack : Stack
    {
        internal PersonalSecOpsStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var vpc = new EC2.Vpc(this, "PersonalSecOpsVpc", new EC2.VpcProps
            {
                MaxAzs = 3 // Default is all AZs in region
            });

            var mySql = new RDS.DatabaseInstance(this, …
Run Code Online (Sandbox Code Playgroud)

.net amazon-web-services amazon-rds aws-cloudformation aws-cdk

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