小编Zeu*_*s82的帖子

ASP - Core在启动时迁移EF Core SQL DB

是否可以让我的ASP Core Web API确保使用EF Core将数据库迁移到最新的迁移?我知道这可以通过命令行完成,但我想以编程方式完成.

更新

根据Janshair Khan的回答,我提出了这个助手类:

using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MyWebApi.Models;

namespace MyWebApi
{
    public static class DataSeeder
    {
        public static void SeedData(this IApplicationBuilder app)
        {
            var context = app.ApplicationServices.GetService<MyContext>();

            if (!context.Database.EnsureCreated())
                context.Database.Migrate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下Configure方法调用此方法Startup.cs:

app.SeedData();
Run Code Online (Sandbox Code Playgroud)

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

49
推荐指数
11
解决办法
2万
查看次数

使用IActionResult作为Actions中的结果类型的优点

使用IActionResultWebApi控制器的返回类型而不是您想要返回的实际类型有什么优势或建议?

我见过的大多数示例都返回了IActionResult,但是当我构建我的第一个站点时,我专门使用View Model类作为我的返回类型....现在我觉得我做错了!

asp.net-core-mvc asp.net-core

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

AmbiguousActionException:匹配多个动作.以下操作匹配路由数据并满足所有约束

我正在使用ASP.NET Core MVC创建一个网站.当我点击某个动作时,我收到此错误:

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

Web.Controllers.ChangeEventsController.Create (Web)
Web.Controllers.ProductsController.CreateChangeEvent (Web)
Run Code Online (Sandbox Code Playgroud)

这就是我在我的ProductsController的index.cshtmlm中定义我的动作的方法:

<a asp-controller="ChangeEvents" asp-action="Create" asp-route-id="@item.Id">Create Change Event</a>
Run Code Online (Sandbox Code Playgroud)

这是我的路线:

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
Run Code Online (Sandbox Code Playgroud)

以下是我定义操作的方式:

// ChangeEventsController
[HttpGet("{id}")]
public IActionResult Create(Guid id)

// ProductsController
[HttpGet("{id}")]
public IActionResult CreateChangeEvent(Guid id)
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

更新

感谢@MegaTron的回复,但是我想知道为什么我不能为不同的控制器提供相同的操作路径.如果我有许多控制器,每个创建实体,我觉得你提出的解决方案不会很好地扩展.

c# asp.net-core-mvc asp.net-core asp.net-core-routing

19
推荐指数
2
解决办法
3万
查看次数

"docker -build"的输出在哪里?

我正在尝试构建一个示例泊坞窗图像.当我运行以下命令时:

docker build -t sample .
Run Code Online (Sandbox Code Playgroud)

码头图像在哪里?

这是我的Dockerfile:

FROM node:boron

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

18
推荐指数
2
解决办法
5614
查看次数

ASP Core 无法在 VS 2017 中设置用户机密

使用 Visual Studio 2017,当我尝试设置用户密码时,出现以下错误:

> dotnet user-secrets set Authentication:Google:ClientId mysecretclientid
> Could not find the global property 'UserSecretsId' in MSBuild project 'c:\test\myproj.csproj'. Ensure this property is set in the project or use the '--id' command line option.
Run Code Online (Sandbox Code Playgroud)

我的 Startup.cs 中有这个:

[assembly: UserSecretsId("project-8084c8e7-0000-0000-b266-b33f42dd88c0")]

...

builder.AddUserSecrets<Startup>();
Run Code Online (Sandbox Code Playgroud)

如果我将此添加到我的 csproj:

  <PropertyGroup>
    <UserSecretsId>project-8084c8e7-0000-0000-b266-b33f42dd88c0</UserSecretsId>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息

Duplicate 'Microsoft.Extensions.Configuration.UserSecrets.UserSecretsIdAttribute'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c# .net-core asp.net-core visual-studio-2017

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

ASP.NET Core Expose配置到DI注入服务

我有一个ASP.NET核心WebAPI项目,我正在尝试向我添加配置,我IEmailService通过DI注入如下:

services.AddTransient<IEmailSender, AuthMessageSender>();
Run Code Online (Sandbox Code Playgroud)

如何AuthMessageSender在配置文件中获取设置的实例?

configuration asp.net-core

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

使用Postman上传ASP核心WebApi测试文件

我创建了一个采用任意文件的端点:

[HttpPost()]
public async Task<IActionResult> CreateFile(IFormFile file)
Run Code Online (Sandbox Code Playgroud)

当我用Postman测试时,它file总是为空.

这是我在Postman做的事情:

邮差截图

我究竟做错了什么?

c# asp.net-web-api postman .net-core

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

ASP.NET Core Change Build目录

有谁知道如何更改ASP.NET Core项目的Build目录?在构建下的项目设置中,输出路径是只读的.

build asp.net-core

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

ConcurrentDictionary GetOr添加异步

我想使用诸如GetOrAdda之类的东西ConcurrentDictionary作为Web服务的缓存。该词典有异步版本吗?GetOrAdd将使用发出Web请求HttpClient,因此,如果该词典的某个版本中GetOrAdd是异步的,那就太好了。

为了消除混淆,字典的内容将是对Web服务的调用的响应。

ConcurrentDictionary<string, Response> _cache = new ConcurrentDictionary<string, Response>();



var response = _cache.GetOrAdd("id", (x) => { _httpClient.GetAsync(x).GetAwaiter().GetResponse();} )
Run Code Online (Sandbox Code Playgroud)

.net c# .net-core .net-core-2.2

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

C# - 如何使用 Bouncy Castle 解密加密的私钥

我有一个通过运行生成的私钥:

openssl req -new -sha384 -x509 -days 63524 -subj "/C=CA/ST=State/L=City/O=Org/CN=Org-CA" -extensions v3_ca -keyout Org-CA.key -out Org-CA.pem -passout pass:pass1234
Run Code Online (Sandbox Code Playgroud)

我需要使用此私钥和证书来签署客户端 CSR。我曾经使用 OpenSSL 来执行此操作,但我需要在 C# 中执行此操作。

我在网上找到了我想要做的事情的示例,但这些示例使用的是充气城堡和未加密的私钥。

密钥文件如下所示:

-----BEGIN ENCRYPTED PRIVATE KEY-----
....
-----END ENCRYPTED PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过这样做来加载它:

var privatekey = File.ReadAllBytes(@"Org-CA.key");
var rsaKeyParameters = PrivateKeyFactory.DecryptKey("pass1234".ToArray(), privatekey);
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我收到一条错误消息Wrong number of elements in sequence (Parameter 'seq')'

这是我应该解密和加载私钥的方式吗?

.net c# encryption bouncycastle .net-core

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