小编Rah*_*hul的帖子

OData连接服务与OData V4客户端代码生成器

我知道这些扩展用于生成基于Odata服务的客户端代码.

  1. OData Connected Service与OData v4 Client Code Generator扩展之间的区别是什么?
  2. 这些扩展的目的是什么?
  3. 我何时应该使用OData连接服务,何时应该使用客户端代码生成器?

任何人都可以解释利弊吗?

c# odata odata-v4

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

Dotnet 提前:PublishReadyToRun vs PublishAot vs RunAOTCompilation

最近的 dotnet 版本(dotnet 6 和 7)具有提前 (AOT) 编译功能。根据官方文档,有不同的方法可以实现这一目标。

原生 AOT 部署

  <PropertyGroup>
    <PublishAot>true</PublishAot>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

准备运行编译

  <PropertyGroup>
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

AOT Blazor WebAssembly

<PropertyGroup>
  <RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup
Run Code Online (Sandbox Code Playgroud)

仅通过阅读文档很难理解这个概念。PublishReadyToRun 与 PublishAot 之间有什么区别?何时使用其中一种而不是另一种?以及如何为类库、blazor wasm 和 asp.net core 项目启用 AoT 编译?

.net c# aot

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

c#比较具有不同值的属性的两个对象

我需要创建一个泛型方法,它将获取两个对象(相同类型),并返回具有不同值的属性列表.由于我的要求有点不同,我不认为这是重复的.

public class Person
{
   public string Name {get;set;}
   public string Age {get;set;}
}

Person p1 = new Person{FirstName = "David", Age = 33}
Person p2 = new Person{FirstName = "David", Age = 44}

var changedProperties = GetChangedProperties(p1,p2);
Run Code Online (Sandbox Code Playgroud)

该代码解释了该要求:

public List<string> GetChangedProperties(object A, object B)
{
    List<string> changedProperties = new List<string>();
   //Compare for changed values in properties 
   if(A.Age != B.Age)
   {
       //changedProperties.Add("Age");
   } 
   //Compare other properties
   ..
   ..
   return changedProperties;
}
Run Code Online (Sandbox Code Playgroud)

应考虑以下事项:

  1. 通用 - 应该能够比较任何类型的对象(具有相同的类)
  2. 性能
  3. 简单

那里有没有开箱即用的图书馆?

我可以使用AutoMapper …

c# comparison compare object automapper

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

实现PropertyChangedBase时的caliburn.micro序列化问题

我正在开发一个客户端/服务器数据驱动的应用程序,使用caliburn.micro作为前端,使用Asp.net WebApi 2作为后端.

public class Person
{
    public int Id {get;set;}
    public string FirstName{get;set;}
    ...
}
Run Code Online (Sandbox Code Playgroud)

该应用程序包含一个名为"Person"的类."Person"对象被序列化(JSON)并使用简单的REST协议从客户端到服务器来回移动.解决方案正常运行没有任何问题.

问题:

我为"Person"设置了一个父类"PropertyChangedBase",以实现NotifyOfPropertyChanged().

public class Person : PropertyChangedBase
{
    public int Id {get;set;}

    private string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            _firstName = value;
            NotifyOfPropertyChange(() => FirstName);
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是这次"Person"类的属性在接收端有NULL值.

我猜序列化/反序列化存在问题.这仅在实现PropertyChangedBase时发生.

任何人都可以帮我解决这个问题吗?

c# wpf serialization json caliburn.micro

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

Caliburn.Micro将DateTimeOffset绑定到DatePicker

DateTimeOffset由于Odata不支持,我需要将属性绑定到WPF DatePicker DateTime。我知道如何绑定DateTime属性。

我尝试DateTimeOffset将DatePicker的绑定DateTime属性与绑定属性相同。

但是价值根本没有改变。始终具有默认值。

我怎么解决这个问题?

c# wpf datepicker mvvm caliburn.micro

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

如何使用RestSharp使用JWT访问令牌和用户声明

我正在使用以下代码从Asp.net Web Api 2.2服务中使用JWT访问令牌.我已按照本文在Web Api服务中设置授权服务器.我在客户端使用RestSharp.

客户代码:

            var client = new RestClient(http://localhost:58030);
            client.Timeout = 30000;
            var request = new RestRequest(@"/Oauth/Token", Method.POST);
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            request.AddHeader("grant_type", "password");
            request.AddHeader("username", "admin@example.com");
            request.AddHeader("password", "Admin@456");
            IRestResponse response = client.Execute(request);
            result = response.Content;
Run Code Online (Sandbox Code Playgroud)

结果我得到以下错误:

{
  "error_description":"grant type not supported",
  "error":"unsupported_grant_type"
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我收到此错误,我该如何解决?
  2. 如何访问客户端中的用户名等声明?
  3. 或者,我如何使用Identity Model来使用服务?

c# restsharp jwt thinktecture-ident-server asp.net-web-api2

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

使用单数据库多上下文进行 EF6 Code First 迁移

我正在构建一个包含 3 个项目的 Asp.net MVC5 + EF6 解决方案。我在我的项目中启用了自动迁移。下图显示了我的项目结构。

在此处输入图片说明

  1. 我有一个主项目和两个子项目。
  2. 我有一个BaseContext主要项目。
  3. 子项目有自己的context类,这些类派生自 BaseContext.
  4. 以上所有上下文都连接到一个数据库。

楷模:

Project2 中的模型

public class Product
{
    [Key]
    public int ProductId {get;set;}
    ...
}
Run Code Online (Sandbox Code Playgroud)

Project3 中的模型

public class Order
{
    [Key]
    public int OrderId {get;set;}

    [ForeignKey("Product")]
    public int ProductId {get;set}

    public virtual Product Product;

    ...
}
Run Code Online (Sandbox Code Playgroud)

来自Project3实体 ( Order.ProductId) 的属性引用来自Project2实体 的属性(Product.ProductId)作为外键引用。

当我update-database在项目 1 和 2 中运行命令时,一切顺利。但是当update-database在项目 3 中运行命令时,它给出了一个错误:

数据库中已经有一个名为“Product”的对象。

现在我正在使用update-database …

c# asp.net-mvc entity-framework entity-framework-migrations

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

简单 Odata 客户端 - 如何在每个请求标头中添加 oAuth 令牌?

在 Microsoft oData v4 代理客户端中,有一个选项可以将身份验证令牌添加到每个请求中。可以通过以下方式实现:

var container = new Default.Container(new Uri(http://localhost:9000/));

//Registering the handle to the BuildingRequest event. 
container.BuildingRequest += (sender, e) => OnBuildingRequest(sender, e, accessToken);


//Every time a OData request is build it adds an Authorization Header with the acesstoken 
private static void OnBuildingRequest(object sender, BuildingRequestEventArgs e, TokenResponse token)
{
 e.Headers.Add("Authorization", "Bearer " + token.AccessToken);
}
Run Code Online (Sandbox Code Playgroud)

如何使用简单的 odata 客户端做同样的事情?

c# auth-token access-token oauth-2.0 simple.odata.client

4
推荐指数
2
解决办法
9049
查看次数

实现通用存储库模式-实体密钥类型

我正在Asp.Net Web API应用程序中实现存储库模式。

public abstract class Repository<T> : IRepository<T> where T : EntityBase
 {
     private DbContext context_;

     public Repository(DbContext context)
     {
         context_ = context;
     }

     public virtual async Task<T> GetAsync(int id)
     {
         return await context_.Set<T>().FindAsync(id);
     }

     ...

 }
Run Code Online (Sandbox Code Playgroud)

问题:

在这里,我有一个方法GetAsync(int id),该方法适用于具有单个键和int类型的实体。

但是,有些实体具有键string类型,有些实体具有复合键。

题:

我该如何克服这个问题?

是否有可能以通用方式解决该问题?

c# generics entity-framework repository-pattern asp.net-web-api2

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

如何在生产中部署Owin自托管应用程序?

我有一个Asp.Net Owin自托管WebApi应用程序.该应用程序可以作为生产环境中的Windows服务安装.

目前我正在运行并通过url http:// localhost:8000成功访问该服务.

现在我想将服务映射到域以从公共网络访问它.我有一个注册域名并可以控制它.例如:www.myservice.com

如何将域指向自助托管应用程序的WebApi服务?

c# asp.net self-hosting owin asp.net-web-api2

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

Caliburn 微型数据网格绑定

我在 WPF 应用程序中使用 Caliburn Micro 框架,我需要将集合绑定到 DatGrid 的 ItemsSource。请考虑以下代码:

班级

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ObservableCollection<Subject> Subjects;
}

public class Subject
{
    public string Title{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

查看模型

public class PersonViewModel : Screen
{
    private Person _person;

    public Person Person
    {
        get { return _person; }
        set
        {
            _person = value;
            NotifyOfPropertyChange(() => Person);
            NotifyOfPropertyChange(() => CanSave);
        }
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

看法

<UserControl x:Class="CalCompose.ViewModels.PersonView" …
Run Code Online (Sandbox Code Playgroud)

c# wpf binding datagrid caliburn.micro

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

c#Lambda Expression - 从字符串中获取属性值

考虑遵循lambda表达式:

IQueryable<Product> query = query.Where(x => x.ProductName.Contains("P100"));
Run Code Online (Sandbox Code Playgroud)

我需要转换上面这样的代码:

IQueryable<Product> query = query.Where(x => x.GetPropertyValue("ProductName").Contains("P100"));
Run Code Online (Sandbox Code Playgroud)

在这里,我添加了一个虚拟方法GetPropertyValue("ProductName")来解释需求.在上面的代码中,属性应该在运行时解析.换句话说,我需要从sting值Eg访问该属性"ProductName"

我怎样才能做到这一点?

c# linq lambda iqueryable

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