我有一个 WEB API 应用程序,模板(或 EF Core)已在上下文所在的文件中设置了连接字符串。我想从那里删除它并将其放入 appsettings 文件中并在 DbContext 的 OnConfiguring() 方法中读取它。
public partial class ReportingContext : DbContext
{
public MyAppContext() {}
public MyAppContext(DbContextOptions<MyAppContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("my-connection-string", x => x.UseNetTopologySuite());
//I want to remove the connection string from the above line, by reading from the appsettings file
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它位于上下文的 OnConfiguring 方法中。例如,如果我尝试放在外部,例如在启动时,应用程序将不再工作,因为它需要 OnConfiguring 中指定的连接字符串,因为模型中的逻辑按以下方式实例化上下文:
public partial class SomeClassOfMine
{
public static List<BusinessLogic.Dto.NearbyMarkets> GetNearbyMarkets(int adm0code, double lat, double …Run Code Online (Sandbox Code Playgroud) 我有两个 Web API 服务(源和目标)。每个都使用客户端密钥在 Azure B2C 中注册为 AD 应用程序。
我正在尝试调用从源服务到目标服务 API 的 gRPC API 调用,但是当我尝试进行调用时,出现 gRPC 异常,表明源未经身份验证。
注意:当我从目标 WebAPI 中删除范围策略和授权属性时,一切正常,但当然这是不安全的。
在源服务启动中我有以下内容......
注意:源和目标的配置设置都是正确的。我已经三次检查所有配置设置是否正确。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options =>
{
Configuration.Bind("AzureAdB2C", options);
});
Run Code Online (Sandbox Code Playgroud)
我不确定是否需要,但我还在源 API 的启动中包含了以下逻辑。
注意:我现在已经对所需的范围进行了硬编码。
services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C")
.EnableTokenAcquisitionToCallDownstreamApi(new string[] { "https://nextwaredev.onmicrosoft.com/nextware.productportal.sharedservices.api/sharedservices_readaccess", "https://nextwaredev.onmicrosoft.com/nextware.productportal.sharedservices.api/sharedservices_readwriteaccess" })
.AddInMemoryTokenCaches();
Run Code Online (Sandbox Code Playgroud)
目标服务具有正确的策略,并且两个服务都配置为使用授权和身份验证。
app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)
我已经根据上面的相同范围添加了源所需的 API 权限。
当我尝试调用目标 API 上的方法时,我收到一个 gRPC 异常,表明源未经身份验证。
因此,我想也许我需要传递应用程序访问令牌,但是当我尝试获取 JWT 访问令牌时(以下示例 调用 tokenAcquisition.GetAccessTokenForAppAsync),我收到另一个异常“AADB2C90086:不支持提供的 grant_type [client_credentials]。 ”
注意:我有一个 Blazor 应用程序,调用相同的安全 API 时没有任何问题。不过,我调用 GetAccessTokenForUserAsync... ,它返回正确的令牌,并具有调用相同下游源或目标 Web api 服务所需的应用范围。 …
我有一个简单的.NET Core WebAPI没有身份验证的。我使用默认策略添加了 Cors。我从 React 网站或 Postman 连接和获取数据没有问题(一切都在我的机器上本地运行)。现在,我尝试在超级简单的node应用程序中从该 API 获取数据,但收到此错误:
file:///Users/aw/Projects/TestNodeApp/node_modules/node-fetch/src/index.js:94
reject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));
^
FetchError: request to https://localhost:5001/api/teams failed, reason: self signed certificate
at ClientRequest.<anonymous> (file:///Users/aw/Projects/TestNodeApp/node_modules/node-fetch/src/index.js:94:11)
at ClientRequest.emit (node:events:394:28)
at TLSSocket.socketErrorListener (node:_http_client:447:9)
at TLSSocket.emit (node:events:394:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
type: 'system',
errno: 'DEPTH_ZERO_SELF_SIGNED_CERT',
code: 'DEPTH_ZERO_SELF_SIGNED_CERT',
erroredSysCall: undefined
}
Run Code Online (Sandbox Code Playgroud)
这是我的整个node申请:
import fetch from 'node-fetch';
async function fetchTeams() {
const response = await …Run Code Online (Sandbox Code Playgroud) javascript certificate node.js asp.net-web-api asp.net-core-webapi
我正在学习 Webapi,所以我尝试构建一个连接到 SQL 服务器的简单 Api,当我添加新的电影数据时出现此错误
Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时发生错误。有关详细信息,请参阅内部异常。---> Microsoft.Data.SqlClient.SqlException (0x80131904):INSERT 语句与 FOREIGN KEY 约束“FK_Movies_SuperHeroes_HeroId”冲突。冲突发生在数据库“SupersDb”、表“dbo.SuperHeroes”、列“HeroId”中。
我有两个型号:
超级英雄模型:
namespace SuperHeroesApi.Models
{
public class SuperHero
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int HeroId { get; set; }
[Required]
[MaxLength(100)]
public string Name { get; set; }
[MaxLength(100)]
public string FirstName { get; set; }
[MaxLength(100)]
public string LastName { get; set; }
[MaxLength(100)]
public string City { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
电影型号:
namespace SuperHeroesApi.Models
{
public class Movie
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MovieId { get; …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-web-api asp.net-web-api2 asp.net-core asp.net-core-webapi
有人请告诉我从 ac# 对象中删除属性的最简单的语法。不知道为什么网上说的不清楚。
{
"id": 1,
"name": "string",
"email": "string",
"cities": []
}
Run Code Online (Sandbox Code Playgroud)
这是我调用 get API 时得到的响应。我想删除城市数组,但我不知道为什么 C# 中的一切都如此复杂。我期待一个神奇的短语法,如删除(在 JS 中)。请记住,此响应是 dbContext 响应,而不是标准对象 (DTO)。
是否建议等待“_teamRepository.AddTeamToDbAsync(teamToAdd)”方法?它只是为了保存到数据库,无需进一步验证等。如果我不等待保存操作,我会提供更快的结果,但是否存在一些我不知道的风险?
public async Task<OperationResult<TeamDto>> AddTeamAsync(TeamForCreationDto team)
{
var teamToAdd = _mapper.Map<Team>(team);
bool IsNameTaken = await CheckIfTeamExistsAsync(team.Name);
if (IsNameTaken)
{
return new OperationResult<TeamDto>
{
IsSuccess = false,
ErrorMessage = "Provided name is already taken.",
HttpResponseCode = 409
};
}
else
{
_teamRepository.AddTeamToDbAsync(teamToAdd); // HERE
var teamToReturn = _mapper.Map<TeamDto>(teamToAdd);
return new OperationResult<TeamDto>
{
IsSuccess = true,
Data = teamToReturn,
HttpResponseCode = 201
};
}
}
Run Code Online (Sandbox Code Playgroud)
让我知道你的想法以及我的理解是否正确
byte[] bytes = System.IO.File
.ReadAllBytes(
HttpContext.Current.Server.MapPath("~/Images/orderedList1.png"));
var result_ = new HttpResponseMessage(HttpStatusCode.OK);
result_.Content = new ByteArrayContent(bytes);
result_.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result_;
Run Code Online (Sandbox Code Playgroud)
我使用 WebAPI2 编写 REST 服务
我需要将书添加到数据库。
我有这个代码模型:
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public int Year { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和控制器:
[HttpPost]
public void CreateBook([FromBody]Book book)
{
db.Books.Add(book);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我尝试从邮递员发送 POST 请求
但我有这个错误
"Message": "此资源不支持请求实体的媒体类型 'multipart/form-data'。", "ExceptionMessage": "没有 MediaTypeFormatter 可用于从具有媒体类型的内容中读取类型为 'Book' 的对象'多部分/表单数据'。”
我怎么能应付呢?
我正在创建一个新的webapi模式,我决定使用一个新模式来保持一致性.
我正在尝试在我的类对象的构造函数上设置我的错误消息 Pessoa
public class PessoaModel
{
public int PessoaId { get; set; }
public string PessoaNome { get; set; }
public string PessoaNomeFantasia { get; set; }
public string PessoaCnpjCpf { get; set; }
public string PessoaEmail { get; set; }
PessoaModel()
{
if (PessoaNome == null)
throw new Exception("Preencha Nome");
if (PessoaEmail == null)
throw new Exception("Preencha Email");
if (PessoaCnpjCpf == null)
throw new Exception("Preencha Cpf ou Cnpj");
}
}
Run Code Online (Sandbox Code Playgroud)
然后发生异常,但控制器继续运行
[HttpPost]
[Route("Pessoa")]
public IHttpActionResult Post(PessoaModel pessoa)
{ …Run Code Online (Sandbox Code Playgroud) 我创建了一个返回 200 ok 响应的 Web API。
public IHttpActionResult get()
{
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
此外,我使用 NUnit 框架创建了一个测试项目。
var controller = new StatusController();
var result= controller.level0() as OkNegotiatedContentResult<object>;
IHttpActionResult actionResult = controller.level0();
Assert.AreEqual(HttpStatusCode.OK, actionResult);
Run Code Online (Sandbox Code Playgroud)
但我有这样的错误
Expected: OK
But was: <System.Web.Http.Results.OkResult>
Run Code Online (Sandbox Code Playgroud)
当我尝试调试“actionResult”变量时,它包含一个错误
Request = '((System.Web.Http.Results.OkResult)actionResult).Request' threw an exception of type 'System.InvalidOperationException'
Run Code Online (Sandbox Code Playgroud)
如何检查我的 http 状态代码?
asp.net-web-api ×10
c# ×8
asp.net-core ×3
asp.net ×2
asp.net-mvc ×2
assert ×1
async-await ×1
asynchronous ×1
azure-ad-b2c ×1
certificate ×1
javascript ×1
json ×1
node.js ×1
nunit ×1
unit-testing ×1