是否可以让我的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) 使用IActionResultWebApi控制器的返回类型而不是您想要返回的实际类型有什么优势或建议?
我见过的大多数示例都返回了IActionResult,但是当我构建我的第一个站点时,我专门使用View Model类作为我的返回类型....现在我觉得我做错了!
我正在使用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的回复,但是我想知道为什么我不能为不同的控制器提供相同的操作路径.如果我有许多控制器,每个创建实体,我觉得你提出的解决方案不会很好地扩展.
我正在尝试构建一个示例泊坞窗图像.当我运行以下命令时:
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) 使用 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)
我究竟做错了什么?
我有一个ASP.NET核心WebAPI项目,我正在尝试向我添加配置,我IEmailService通过DI注入如下:
services.AddTransient<IEmailSender, AuthMessageSender>();
Run Code Online (Sandbox Code Playgroud)
如何AuthMessageSender在配置文件中获取设置的实例?
我创建了一个采用任意文件的端点:
[HttpPost()]
public async Task<IActionResult> CreateFile(IFormFile file)
Run Code Online (Sandbox Code Playgroud)
当我用Postman测试时,它file总是为空.
这是我在Postman做的事情:
我究竟做错了什么?
有谁知道如何更改ASP.NET Core项目的Build目录?在构建下的项目设置中,输出路径是只读的.
我想使用诸如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) 我有一个通过运行生成的私钥:
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')'
这是我应该解密和加载私钥的方式吗?
asp.net-core ×6
c# ×6
.net-core ×4
.net ×2
bouncycastle ×1
build ×1
docker ×1
dockerfile ×1
encryption ×1
postman ×1