标签: asp.net-web-api

NET Core 3.1 应用程序设置中的连接字符串与 EntityFramework Core

我有一个 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)

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

0
推荐指数
1
解决办法
3227
查看次数

Azure B2C:Asp.Net Web API 调用 Asp.Net Web.API

我有两个 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 服务所需的应用范围。 …

c# asp.net-web-api azure-ad-b2c azure-ad-msal

0
推荐指数
1
解决办法
1355
查看次数

本地获取 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

0
推荐指数
1
解决办法
4462
查看次数

Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时发生错误。详细信息请参见内部异常

我正在学习 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

0
推荐指数
1
解决办法
4万
查看次数

如何从 C# 中的对象中完全删除属性

有人请告诉我从 ac# 对象中删除属性的最简单的语法。不知道为什么网上说的不清楚。

{
  "id": 1,
  "name": "string",
  "email": "string",
  "cities": []
}
Run Code Online (Sandbox Code Playgroud)

这是我调用 get API 时得到的响应。我想删除城市数组,但我不知道为什么 C# 中的一切都如此复杂。我期待一个神奇的短语法,如删除(在 JS 中)。请记住,此响应是 dbContext 响应,而不是标准对象 (DTO)。

c# asp.net-web-api

0
推荐指数
1
解决办法
9633
查看次数

当我不需要结果时,是否应该等待异步 SaveToDb 方法?

是否建议等待“_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)

让我知道你的想法以及我的理解是否正确

c# asynchronous async-await asp.net-web-api asp.net-core

0
推荐指数
1
解决办法
52
查看次数

使用 ASP.NET Web API 返回图像并显示它?

网络 API 操作:

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)

Ajax 调用 在此处输入图片说明

响应 - 控制台中的数据 在此处输入图片说明

c# asp.net-mvc asp.net-web-api asp.net-web-api2

-1
推荐指数
1
解决办法
6625
查看次数

向 WebAPI2 发布请求

我使用 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' 的对象'多部分/表单数据'。”

我怎么能应付呢?

c# asp.net-mvc json asp.net-mvc-4 asp.net-web-api

-1
推荐指数
1
解决办法
1223
查看次数

在构造函数上抛出异常

我正在创建一个新的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)

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

-1
推荐指数
1
解决办法
64
查看次数

如何使用 NUnit 检查 200 ok

我创建了一个返回 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 状态代码?

c# nunit unit-testing assert asp.net-web-api

-1
推荐指数
1
解决办法
1780
查看次数