小编And*_*iss的帖子

.NET Core 2.1 Identity为所有用户提供相关角色

我正在尝试为用户管理管理页面提取所有Identity用户及其相关角色.我认为这相当容易,但显然不是.我尝试过以下解决方案:https://stackoverflow.com/a/43562544/5392786但到目前为止还没有解决.

这是我到目前为止:

ApplicationUser:

public class ApplicationUser : IdentityUser
{
    public List<IdentityUserRole<string>> Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

的DbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

启动标识代码

services.AddIdentity<ApplicationUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)

我想要显示列表的Razor Page:

public class IndexModel : PageModel
{
    private readonly UserManager<ApplicationUser> userManager;

    public IndexModel(UserManager<ApplicationUser> userManager)
    {
        this.userManager = userManager;
    }

    public IEnumerable<ApplicationUser> Users { get; set; }

    public void OnGetAsync()
    {
        this.Users = userManager.Users.Include(u => …
Run Code Online (Sandbox Code Playgroud)

c# mysql entity-framework-core asp.net-core asp.net-core-identity

26
推荐指数
6
解决办法
3万
查看次数

Azure Service Bus消息泵是否真的是事件驱动的?

所以我们最近一直在研究Azure Service Bus,我们对是否应该使用无限循环轮询队列/订阅或者是否应该使用OnMessage回调/消息泵功能感到困惑.什么会执行更少的操作,从而降低成本?

理想情况下,我们需要一个事件驱动的系统,因此我们不会浪费操作,而且通常只是一种更好的方法.

我的问题是,使用OnMessage定义为"在事件驱动的消息泵中处理消息"真的是事件驱动的吗?

如果你看看这个页面(QueueClient.OnMessage):https://msdn.microsoft.com/library/azure/microsoft.servicebus.messaging.queueclient.onmessage.aspx 你会注意到底部的评论它基本上是一个无限循环的包装器,它调用Receive()方法.这对我来说听起来不是事件驱动的.

现在,如果您查看此页面(SubscriptionClient.OnMessage):https: //msdn.microsoft.com/en-us/library/azure/dn130336.aspx,该注释不存在.那么主题/订阅和队列是一样的,还是它实际上是订阅的事件驱动而不是队列?

为什么他们甚至说这是事件驱动的,显然不是?QueueClient.OnMessage页面上的注释具有"无限循环"和"每个接收操作是可计费事件"这一事实有点可怕.

另外,我并不是真的担心它会花多少钱/多少钱,我更感兴趣的是让它尽可能高效.

c# servicebus azure azureservicebus azure-servicebus-topics

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

使用 MailKit 和 Gmail OAuth 发送邮件

我正在尝试创建一个应用程序,该应用程序将在客户进行购买时向他们发送电子邮件。我们有自己的 GMail 帐户,我将用它来发送电子邮件。

我已经在 Google API 控制台中设置了我的应用程序并创建了凭据。我在 MailKit 的 GitHub 上发现了这个问题,它看起来很简单,但似乎对我不起作用。

这是我的代码:

var secrets = new ClientSecrets
{
    ClientId = [CLIENTID]
    ClientSecret = [SECRET]
};

var googleCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, new[] { GmailService.Scope.MailGoogleCom }, email, CancellationToken.None);
await googleCredentials.RefreshTokenAsync(CancellationToken.None);

using (var client = new SmtpClient())
{
    client.Connect("smtp.gmail.com", 587);

    var credentials = new NetworkCredential(googleCredentials.UserId, googleCredentials.Token.AccessToken);
    client.Authenticate(credentials);

    await client.SendAsync(message);
    client.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)

调用Authenticate给出了以下错误:

MailKit.Security.AuthenticationException : AuthenticationInvalidCredentials: 5.7.8 用户名和密码不被接受。在 5.7.8 https://support.google.com/mail/?p=BadCredentials m3-v6sm3447324wrs.39 - gsmtp 中了解更多 信息

例外中的 Google 支持页面基本上只是说要么使用两步验证 + 应用密码,要么启用不太安全的应用。这两个我都不想要。为什么在 …

c# email oauth-2.0 google-oauth asp.net-core

8
推荐指数
2
解决办法
7147
查看次数

当查询字符串更改时重新渲染 React 组件

我对 React 很陌生,所以如果这只是重复,我深表歉意 - 我试图寻找其他问题的解决方案,但没有一个对我有帮助。

我希望 React 组件在页面的查询字符串更改时重新渲染。我有一个基本的联系表单,并且我正在使用通过查询字符串传递的值预填充一个字段。我的理解是,只要状态或组件发生变化,React 就应该重新渲染组件,并且看到查询字符串是 props (this.) 的一部分,那么我认为这很容易,但情况似乎并非如此我。

路线

<Route exact path="/contact-us" component={ContactUs} />
Run Code Online (Sandbox Code Playgroud)

成分

import React, { PureComponent, Fragment } from 'react';
import bannerImage from './../../assets/images/contact-banner.jpg';
import QueryString from 'query-string';

class ContactUs extends PureComponent {
  render() {
    return (
      <Fragment>
        <CommonBanner banner={bannerImage} title="Contact us" />
        <ContactUsForm tripName={QueryString.parse(this.props.location.search).tripName)} />
      </Fragment>
    );
  }
}

export default ContactUs;
Run Code Online (Sandbox Code Playgroud)

我希望在以下情况下重新呈现联系表单: 用户从通过查询字符串发送行程名称的位置单击,然后单击页面标题中链接到“联系我们”的“联系我们”按钮再次页面,但查询字符串中没有行程名称。然后,这应该删除行程名称字段的预填充。

更新

我注意到,如果我手动从浏览器中的 URL 中删除查询字符串,则该字段会按预期被清空。只有当我单击菜单中仅链接到“联系我们”的链接时,似乎什么也没有发生。

javascript routes query-string reactjs react-router-v4

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

.NET Core的NUnit Entity Framework集成测试依赖项注入问题

我刚刚开始研究带有实体框架的.NET Core。我以前将.NET Framework与Ninject一起使用,但现在尝试使用.NET Core中内置的DI。

我有一TestBase门课,我的考试将由此而来。我希望此类负责使用[OneTimeSetUp]和创建和删除测试数据库[OneTimeTearDown]。问题是我似乎无法弄清如何在设置和拆卸方法中访问我的DI服务。这些方法不能具有参数,并且我的TestBase类必须具有无参数的构造函数,因此也无法从那里获得它们。

[SetUpFixture]
public partial class TestBase
{
    protected IEFDatabaseContext DataContext { get; set; }

    public TestBase(IEFDatabaseContext dataContext)
    {
        this.DataContext = dataContext;
    }

    [OneTimeSetUp]
    public void TestInitialise()
    {
        this.DataContext.Database.EnsureCreated();
    }

    [OneTimeTearDown]
    public void TestTearDown()
    {
        this.DataContext.Database.EnsureDeleted();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面给出了以下错误:

TestBase 没有默认的构造函数。

我可能会以错误的方式进行操作,但这是我过去一直做的事情,因此,请让我知道使用.NET Core DI时是否有更好的方法。


Startup 类参考:

public class Startup
{
    private readonly IConfiguration config;

    public Startup(IConfiguration config)
    {
        this.config = config;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<TestDataContext>(
            options …
Run Code Online (Sandbox Code Playgroud)

c# integration-testing entity-framework dependency-injection asp.net-core

5
推荐指数
2
解决办法
2721
查看次数

使用 create-react-app 代码拆分分离 CSS 文件而不弹出

react-loadable由于我的应用程序变得太大而无法执行此操作,因此我正在使用代码拆分。这一切正常,但 CSS 嵌入在这些新的 JavaScript 块中,然后似乎动态加载到页面中。我希望来自每个块的 CSS 位于单独的文件中,而不是在 JS 文件本身中。我可以在不自行弹出和修改 Webpack 配置的情况下完成此操作吗?如果可能的话,我真的很想避免这种情况。

编辑: 我刚刚弹出来看看实际的 Webpack 配置在做什么。以下评论确认了我遇到的问题,但没有提供解决方案:

在此处输入图片说明

注意最后一句话:

但是,如果您使用代码拆分,任何异步包仍将使用异步代码中的“样式”加载器,因此来自它们的 CSS 不会出现在主 CSS 文件中。

css reactjs webpack create-react-app

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

在区域内时的 Blazor 路由和布局

我有一个现有的 MVC 项目,我正在尝试将 Blazor 集成到其中。为此,我必须从 .NET Core 2.1 升级到 3.1 并更改启动类中的一些内容,以使应用程序像以前一样工作。

整理完所有升级内容后,我现在已将集线器添加到我的Configure启动方法中:

...

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "areas",
        pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

    endpoints.MapControllers();
    endpoints.MapRazorPages();
    endpoints.MapBlazorHub();
});
Run Code Online (Sandbox Code Playgroud)

...和服务器签署 Blazor 服务注册:

...

services
    .AddMvc(options =>
    {
        ...
    })
    .AddRazorOptions(o =>
    {
        ...
    })
    .AddRazorPagesOptions(options =>
    {
        ...
    });

services.AddServerSideBlazor();
Run Code Online (Sandbox Code Playgroud)

最后,我已将 Blazor JS 脚本添加到我的~/Pages/Shared/_Layout.cshtml视图中:

<script src="~/_framework/blazor.server.js"></script>
Run Code Online (Sandbox Code Playgroud)

@page当组件位于视图中时,我正在努力弄清楚新 Razor 组件的值应该是多少。

这是我的文件夹结构:

在此处输入图片说明

Pages文件夹内的所有内容都是新的。

以下是内容Index.razor

@page "/"

<h3>Sales Homepage</h3>

@code {

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下@page …

c# asp.net-core-mvc asp.net-core blazor blazor-server-side

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

EF核心实体从不同来源继承而没有歧视

我正在尝试使用EF Core配置以下所示的两个实体:

用户:

public class User
{
    public int UserId { get; set; }
    public string Title { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    [Required]
    public string Email { get; set; }

    [NotMapped]
    public string FriendlyIdentifier
    {
        get
        {
            var name = $"{Name} {Surname}";
            if (!string.IsNullOrWhiteSpace(name))
                return name;
            else if (!string.IsNullOrWhiteSpace(Email))
                return Email;
            else
                return UserId.ToString();
        }
    }

    public ICollection<Booking> Bookings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用户详细信息:

public class …
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework entity-framework-core asp.net-core

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

Elasticsearch 错误“无法在路径下找到嵌套对象”

我知道这之前已经被问过多次,但现有的问题或答案都没有帮助我。

查询 Elasticsearch 时出现以下错误:

[nested] 未能在路径 [departures] 下找到嵌套对象

我正在运行的查询如下:

{
    "explain":true,
    "from":0,
    "query":{
        "nested":{
            "path":"departures",
            "query":{
                "term":{
                    "departures.yearMonth":{
                        "value":202007
                    }
                }
            }
        }
    },
    "size":20
}
Run Code Online (Sandbox Code Playgroud)

我的映射如下:

{
    "tours":{
        "mappings":{
            "properties":{
                "departures":{
                    "type":"nested",
                    "properties":{
                        "guaranteed":{
                            "type":"boolean"
                        },
                        "spacesRemaining":{
                            "type":"long"
                        },
                        "startDate":{
                            "type":"date"
                        },
                        "yearMonth":{
                            "type":"long"
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,从 Kibana 截取的屏幕截图显示我的索引中有一个有效条目。 在此处输入图片说明

任何想法为什么这个查询会像这样失败?

c# elasticsearch nest

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

将实体框架与 Pomelo 一起使用时 MySqlParameter 类型冲突

我有一个Pomelo.EntityFrameworkCore.MySql安装了包的 DAL.EntityFramework 项目。我还有一个安装了 MySql.Data 包的 DAL.MySQL 包。第二个项目用于与 EntityFramework 无关的一般 MySQL 内容。

在 DAL.EntityFramework 中,我有一个使用 ADO.NET 的方法,以便我可以INSERT ... ON DUPLICATE KEY UPDATE对我的数据库执行操作(否则无法使用)。

public async Task<int> SmartUpsert(UserDetails user)
{
    var dbQuery = this.queryProvider.SmartUpsert(user);

    using (var command = this.Context.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = dbQuery.Query;
        command.CommandType = System.Data.CommandType.Text;
        command.Parameters.AddRange(dbQuery.Params.ToArray());

        this.Context.Database.OpenConnection();
        command.ExecuteNonQuery();
        this.Context.Database.CloseConnection();

        return Convert.ToInt32(command.Parameters["@Output"].Value.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

queryProvider注入到类中,实现在 TAP.MySQL 中。这用于提供所需的特定于提供程序的 SQL,而无需将 EF 项目键入特定的 SQL 提供程序。它还创建参数集合(因为这些也是特定于提供程序的)。

public DbQuery SmartUpsert(UserDetails user)
{
    var query = new DbQuery
    {
        Query = "SmartUpsertUserDetails"
    };

    var …
Run Code Online (Sandbox Code Playgroud)

c# mysql asp.net entity-framework asp.net-core

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