小编Lés*_*ter的帖子

在ASP.NET Web API中序列化对象时出现循环引用错误

我正在用C#编写一个Web API项目,它使用Entity Framework从数据库中提取数据,将其序列化并发送给客户端.

我的项目有2个类,Post和Comment(来自Post的外键).

这些是我的课程.

发布课程:

public partial class Post
{
    public Post()
    {
        this.Attachment = new HashSet<Attachment>();
        this.Comment = new HashSet<Comment>();
    }

    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public System.DateTime Created { get; set; }
    public Nullable<System.DateTime> Modified { get; set; }

    public virtual ICollection<Attachment> Attachment { get; set; }
    public virtual ICollection<Comment> Comment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

评论类:

public partial class Comment …
Run Code Online (Sandbox Code Playgroud)

serialization entity-framework circular-reference asp.net-mvc-4 asp.net-web-api

7
推荐指数
2
解决办法
8840
查看次数

我应该在哪里创建一个异常对象?

MSDN 上的异常文档的最佳实践说,如果在类的许多部分使用相同的异常,您可以在类中使用异常构建器方法。而且,它说在某些情况下,最好使用异常的构造函数。

假设我在一个UserData类中有以下代码:

private MailAddress _addr;

public UserData(string emailAddress)
{
    // Tries to validate the e-mail address
    try
    {
        _addr = new MailAddress(emailAddress);
    }
    catch
    {
        throw new ArgumentException(nameof(emailAddress), "Invalid email address.");
    }
    if (_addr.Address != emailAddress)
    {
        throw new ArgumentException(nameof(emailAddress), "Invalid email address.");
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到,在这两个throw语句中,我抛出了完全相同的异常。

问题是:添加一个异常构建器方法来获取我的异常并抛出它是否正确?如果我这样做,我会得到正确的堆栈跟踪吗?如果不是,我如何确定异常构建器和构造函数之间?

c#

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

如何在C#中使用BouncyCastle的Diffie-Hellman?

我正在编写一个应用程序,它将在手机和Windows PC之间交换数据,我想保护使用Diffie-Hellman交换生成的密钥发送的数据.

我正在尝试使用BouncyCastle,但C#实现的几乎不存在的文档让我感到难过.

我想知道的是:当收到对方的密钥时,生成DH密钥和计算共享密钥的工作流程是什么?(我假设我可以将我的密钥作为字符串发送,我可以将另一方的密钥作为字符串使用.)我在C#中使用哪些对象/方法?

c# bouncycastle diffie-hellman

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

为什么 /signin-oidc 在使用 Azure AD 登录后返回 404?

我正在 ASP.NET Core MVC 3.0 应用程序中实现 Azure AD 身份验证。我已按照教程中的说明进行操作,选项 2;唯一的区别是我使用了现有的应用程序而不是可下载的示例(我确保安装所有 NuGet 包并添加教程和示例提供的配置数据)。我正在我的本地机器上测试这个应用程序。

应用程序已在 Azure 中正确注册,因此我有一个客户端 ID 和一个租户 ID。数据如下:

  • 重定向 URI:Web, https://localhost:5002/signin-oidc; 网络,https://localhost:5002(按此顺序)
  • 登出网址: https://localhost:5002/signout-oidc
  • 隐式授权:ID 令牌

尝试访问标记为 的操作[Authorize]会触发登录过程,但是当它完成时,它会重定向到https://localhost:5002/signin-oidc然后站点返回 404。

appsettings.json 配置:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "[OMITTED]",
    "TenantId": "[OMITTED]",
    "ClientId": "[OMITTED]",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "AllowedHosts": "*"
}

Run Code Online (Sandbox Code Playgroud)

启动类:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "[OMITTED]",
    "TenantId": "[OMITTED]", …
Run Code Online (Sandbox Code Playgroud)

authentication http-status-code-404 azure-active-directory asp.net-core-mvc azure-web-app-service

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

以异步方式调用同步方法?

我正在开发一个 ASP.NET MVC WebApi 项目,其中一种方法需要进行 LDAP 搜索。搜索从 LDAP 服务器检索的信息量确保调用至少需要 7 秒才能完成。调用,因为它使用System.DirectoryServices.Protocols类和方法,是同步和不可修改的。

此 API 将接收的流量相当大(即使 API 位于内部网络中),因此每次调用 LDAP 服务器 7 秒并不是一个好主意。所以我想知道这个:

  • 将它包装在异步方法中是个好主意吗?
  • 异步此调用的正确方法是什么?(是await Task.Run(() => Search(params))一种可以接受的方式吗?)

c# ldap-query async-await asp.net-web-api

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

如何在针对 Azure AD 注销 ASP.NET Core MVC 应用程序时修复错误 404?

我正在将 ASP.NET Core MVC 3.0 应用程序集成到 Azure AD 以进行身份​​验证和授权,一切正常,但是当我尝试注销时,一旦login.microsoftonline.com我注销,它就会重定向到我的应用程序,然后出现以下错误:

No webpage was found for the web address:

https://localhost:5002/Account/SignOut?page=%2FAccount%2FSignedOut
Run Code Online (Sandbox Code Playgroud)

我用来调用注销过程的路径是/AzureAD/Account/SignOut.

内容appsettings.json

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "[OMITTED]",
    "TenantId": "[OMITTED]",
    "ClientId": "[OMITTED]",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)

这些是我的Startup.cs课堂内容:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "[OMITTED]",
    "TenantId": "[OMITTED]",
    "ClientId": "[OMITTED]",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning", …
Run Code Online (Sandbox Code Playgroud)

c# azure-active-directory asp.net-core-mvc openid-connect

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