我尝试按照http://enable-cors.org/server_aspnet.html中的步骤 使我的RESTful API(使用ASP.NET WebAPI2实现)与跨源请求(CORS Enabled)一起工作.除非我修改web.config,否则它无法正常工作.
我安装了WebApi Cors依赖:
install-package Microsoft.AspNet.WebApi.Cors -ProjectName MyProject.Web.Api
Run Code Online (Sandbox Code Playgroud)
然后在我App_Start的课程中我得到WebApiConfig如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
var constraintsResolver = new DefaultInlineConstraintResolver();
constraintsResolver.ConstraintMap.Add("apiVersionConstraint", typeof(ApiVersionConstraint));
config.MapHttpAttributeRoutes(constraintsResolver);
config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(config));
//config.EnableSystemDiagnosticsTracing();
config.Services.Replace(typeof(ITraceWriter), new SimpleTraceWriter(WebContainerManager.Get<ILogManager>()));
config.Services.Add(typeof(IExceptionLogger), new SimpleExceptionLogger(WebContainerManager.Get<ILogManager>()));
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
}
}
Run Code Online (Sandbox Code Playgroud)
但之后我运行应用程序,我请求Fiddler的资源,如: http:// localhost:51589/api/v1/persons ,在响应中,我看不到我应该看到的HTTP头,例如:
Access-Control-Allow-Methods: POST, PUT, DELETE, GET, OPTIONSAccess-Control-Allow-Origin: *我错过了一步吗?我在控制器上尝试了以下注释:
[EnableCors(origins: "http://example.com", headers: "*", methods: "*")]
相同的结果,没有启用CORS. …
我收到一个错误:
User XXX lacks permission to complete this action. You need to have 'AddPackage'
Run Code Online (Sandbox Code Playgroud)
尝试将 nuget 包推送到 Azure DevOps 工件时。我是管理员 这是阶段:
- stage:
displayName: 'Release'
condition: succeeded()
jobs:
- job: 'Publish'
displayName: 'Publish nuGet Package'
steps:
- download: current
artifact: $(PIPELINE_ARTIFACT_NAME)
displayName: 'Download pipeline artifact'
- script: ls $(PATH_PIPELINE_ARTIFACT_NAME)
displayName: 'Display contents of downloaded articacts path'
- task: NuGetAuthenticate@0
displayName: 'Authenticate in NuGet feed'
- script: dotnet nuget push $(PATH_PIPELINE_ARTIFACT_NAME)/**/*.nupkg --source $(NUGET_FEED) --api-key $(NUGET_API_KEY)
displayName: 'Uploads nuGet packages'
Run Code Online (Sandbox Code Playgroud)
和确切的错误:
error: …Run Code Online (Sandbox Code Playgroud) 如何在没有请求的情况下获取AspNet核心应用程序中的基本URL?
我知道从请求你可以获得方案和主机(即$"{Request.Scheme}//{Request.Host}"会给出像https:// localhost:5000这样的东西),但是有可能从其他地方获取这些信息吗?
换句话说,如果我有一个需要构建绝对URL的服务类,当没有可用的http请求时,如何获取当前URL?
更新:也许这种情况甚至没有意义,因为托管URL完全在应用程序外部,这就是为什么只从请求主机中提取它才有意义.
@aspnet/signalr 与 @microsoft/signalr javascript 库之间有什么区别?
两者似乎都对 DotNetCore SignalR 有效,两者似乎都很活跃。在一些教程中,我找到了 @aspnet/signalr,而在 DotNet 文档中,他们使用了 @microsoft/signalr。
有 2 个不同的 Microsoft 官方库似乎有点奇怪,但找不到任何关于不同之处的解释
我正在开始使用Spring DI,但我正在努力使用依赖注入,更糟糕的是我甚至不确定为什么对我来说似乎没问题.希望你们能帮助我!
问题是注释为@Autowired的属性始终为null
我有一些Maven结构的项目:
我在Tomcat 7上运行示例
我正在使用以下依赖项pom.xml:
简单的想法是拥有一个RESTful服务,通过依赖注入能够打印位于以下位置的配置文件中的属性的值: D:\configuracion.conf.
在com.diegotutor.utility我有以下界面:
package com.diegotutor.utility;
public interface ConfigService {
public String getProperty(final String propertyName);
}
Run Code Online (Sandbox Code Playgroud)
实施者:
package com.diegotutor.utility.impl;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;
import com.diegotutor.utility.ConfigService;
public class PropertyFileConfigService implements ConfigService{
Properties prop;
public PropertyFileConfigService (final InputStream input) throws IOException {
if(input == null) {
throw new IllegalArgumentException("Input stream can't be null"); …Run Code Online (Sandbox Code Playgroud) spring dependency-injection jersey nullpointerexception autowired
我使用EF Core 1.0(以前称为广告EF7)和ASP.NET Core 1.0(以前称为ASP.NET 5)作为RESTful API.
我希望将一些工作单元限定为一个http请求,以便在响应HTTP请求时,对DbContext所做的所有更改都将保存到数据库中,否则将不会保存(如果有的话)一些例外,例如).
在过去,我通过使用一个Action过滤器将NHAPnate用于此目的的WebAPI2,我在操作执行时开始事务,并在执行的操作上结束事务并关闭会话.这是http://isbn.directory/book/9781484201107推荐的方式
但是现在我使用Asp.Net Core(与Asp.Net Core Mvc虽然这不应该相关)和实体框架,据我所知,已经实现了一个工作单元.
我认为将中间件插入ASP.NET管道(在MVC之前)将是正确的做事方式.所以请求会:
PIPELINE ASP.NET:MyUnitOfWorkMiddleware ==> MVC Controller ==> Repository ==> MVC Controller ==> MyUnitOfWorkMiddleware
如果没有发生异常,我正在考虑让这个中间件保存DbContext更改,这样在我的存储库实现中我甚至不需要做dbcontext.SaveChanges(),所有内容都像集中式事务.在伪代码中我猜它会是这样的:
class MyUnitOfWorkMiddleware
{
//..
1-get an instance of DbContext for this request.
try {
2-await the next item in the pipeline.
3-dbContext.SaveChanges();
}
catch (Exception e) {
2.1-rollback changes (simply by ignoring context)
2.2-return an http error response
}
}
Run Code Online (Sandbox Code Playgroud)
这有意义吗?有没有人有类似的例子?我无法找到任何良好的做法或建议.
此外,如果我在MVC控制器级别使用此方法,则在POST新资源时无法访问数据库创建的任何资源ID,因为在保存dbContext更改之前不会生成ID(稍后在管道中)在我的中间件控制器完成执行后).如果我需要在控制器中访问新创建的资源ID,该怎么办?
任何建议将不胜感激!
更新1:我发现使用中间件实现此目的的方法存在问题,因为中间件中的DbContext实例与MVC(和存储库)生命周期中的实例不同.请参阅问题实体框架核心1.0 DbContext未限定为http请求
更新2 …
middleware unit-of-work entity-framework-core asp.net-core-1.0
它似乎rules 取代了 only/except最新 GitLab 版本中的功能。
例如,以前,指定作业必须仅针对 master 分支执行是非常简单的。
如果按照规则来实现的话,该怎么办呢?
我猜测 GitLab 提供了一些指定当前分支名称的变量,但我找不到它。我看到的唯一例子是关于合并请求的。
换句话说,如果我有以下工作,如何限制它只在potato分支中运行?
unit_tests:
stage: test
script: dotnet vstest test/*UnitTests/bin/Release/**/*UnitTests.dll --Blame
rules:
- exists:
- test/*UnitTests/*UnitTests.csproj
Run Code Online (Sandbox Code Playgroud) 我发现Newtonsoft.Json图书馆抛出一个问题
System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
当将应用程序作为 Docker 容器运行时,我想知道为什么会发生这种情况以及为什么依赖关系管理不能顺利工作。
我使用.NET 5。
我有一个MyLibrary.A明确用于Newtonsoft.Json 13.0.1序列化和反序列化 json 的库。
我有一个不同的库MyLibrary.B来包装一个MassTransit.AmazonSQS库。此 MassTransit 库也使用 Newtonsoft.Json,但可能是不同的版本。如果我不做任何明确的事情,似乎 MassTransit 依赖项会显示Newtonsoft.Json 11.0.2. 如果MyLibrary.B我明确添加Newtonsoft.Json 13.0.1,即使我没有明确使用它,那么 MassTransit 似乎很乐意使用这个最新的Newtonsoft.Json 13.0.1
现在,我有一个MyApp使用MyLibrary.A和的网络应用程序MyLibrary.B。它在本地运行良好,但我使用 CI/CD 服务器来生成 Docker 映像。
现在,我将此 Docker 映像作为本地容器(作为 Docker Compose)启动,并收到错误
Unhandled exception. System.IO.FileNotFoundException: Could not load …Run Code Online (Sandbox Code Playgroud) 这是与确认电子邮件中的此aspnet身份无效令牌非常相似的问题, 但解决方案无效,因为我使用的是包含ASP.NET核心身份的新ASP.NET Core 1.0.
我的方案如下:
在后端(ASP.NET核心)我有一个功能,发送密码重置电子邮件与链接.为了生成该链接,我必须使用Identity生成代码.像这样的东西.
public async Task SendPasswordResetEmailAsync(string email)
{
//_userManager is an instance of UserManager<User>
var userEntity = await _userManager.FindByNameAsync(email);
var tokenGenerated = await _userManager.GeneratePasswordResetTokenAsync(userEntity);
var link = Url.Action("MyAction", "MyController", new { email = email, code = tokenGenerated }, protocol: HttpContext.Request.Scheme);
//this is my service that sends an email to the user containing the generated password reset link
await _emailService.SendPasswordResetEmailAsync(userEntity , link);
}
Run Code Online (Sandbox Code Playgroud)
这将生成一个电子邮件,其中包含以下链接:
http://myapp:8080/passwordreset?code=CfDJ8JBnWaVj6h1PtqlmlJaH57r9TRA5j7Ij1BVyeBUpqX+5Cq1msu9zgkuI32Iz9x/5uE1B9fKFp4tZFFy6lBTseDFTHSJxwtGu+jHX5cajptUBiVqIChiwoTODh7ei4+MOkX7rdNVBMhG4jOZWqqtZ5J30gXr/JmltbYxqOp4JLs8V05BeKDbbVO/Fsq5+jebokKkR5HEJU+mQ5MLvNURsJKRBbI3qIllj1RByXt9mufGRE3wmQf2fgKBkAL6VsNgB8w==
然后,我的AngularJs应用程序将呈现一个视图,其中包含一个用于输入和确认新密码的表单,并将使用新密码和从URL中的查询参数获取的代码输出JSON对象.
最后,我的后端将获得PUT请求,获取代码并使用Identity验证它,如下所示:
[HttpPut]
[AllowAnonymous]
[Route("api/password/{email}")]
public async Task<IActionResult> …Run Code Online (Sandbox Code Playgroud)根据https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-private.html,可以使用私有VPC链接将API网关与内部应用程序负载均衡器集成。
但是我无法让它发挥作用。
我有一项可通过 ALB 在内部访问的服务。ALB 没有公共 IP,它平衡 AWS Fargate 集群中的请求(全部位于私有子网内)。
ubuntu@ip-10-0-40-89:~$ curl http://internal-sasw-alb-355535611.eu-west-1.elb.amazonaws.com/health
Assembly=Sasw.SampleService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, Environment=Production, CurrentTime=05/05/2021 08:36:00
Run Code Online (Sandbox Code Playgroud)
所以内部一切都很好,我可以提供服务GET http://alb_url/health
我想访问相同的服务,只是这次通过 API 网关。所以我做了以下事情:
foo与 VPC 关联的 HTTP API 类型的 VPC 链接,特别是与 EC2 实例(Fargate 集群)所在的 3 个私有子网关联的 VPC链接10.0.40.0/24,10.0.50.0/2410.0.60.0/24foo。http://internal-rubiko-alb-355535611.eu-west-1.elb.amazonaws.com(我也尝试过http://internal-rubiko-alb-355535611.eu-west-1.elb.amazonaws.com/{proxy}但http://internal-rubiko-alb-355535611.eu-west-1.elb.amazonaws.com/{proxy+}没有成功)/%7Bproxy%7D和集成目标ANY http://internal-rubiko-alb-355535611.eu-west-1.elb.amazonaws.com/{proxy}$default并自动部署https://7ki6gvrngl.execute-api.eu-west-1.amazonaws.com …amazon-web-services amazon-vpc aws-api-gateway aws-application-load-balancer
asp.net-core ×2
nuget ×2
.net-5 ×1
amazon-vpc ×1
angularjs ×1
autowired ×1
aws-application-load-balancer ×1
azure-devops ×1
base-url ×1
c# ×1
cors ×1
dotnet-sdk ×1
gitlab-ci ×1
javascript ×1
jersey ×1
json.net ×1
middleware ×1
rest ×1
signalr ×1
spring ×1
unit-of-work ×1