标签: webapi

将 dotnetcore 5 web api 部署到 iis 给出 404

我有一个带有 .NET 5 的 Web API 项目(直接从 Visual Studio Asp.NET Core Web API 的模板创建),它在从 Visual Studio 调试时工作得很好,尝试将它部署到具有 Hosting Bundle 的 IIS 服务器.NET 5 安装后,部署显然运行良好,但是当我输入 url 时,我有一个 404。有一个单独的 MVC .NET 5 项目,我以相同的方式部署它并且它运行得非常好。

想知道是否有人可以指出我正确的方向,在这里找不到我缺少的东西。

.net-core webapi swashbuckle.aspnetcore

4
推荐指数
2
解决办法
810
查看次数

当 Reader“挂起”时如何中断它(Reader.read() 需要超时)

这个问题与使用 Chrome Serial API 时发生的情况有关,但可能与任何 ReadableStream 相关。我研究了文档,可能错过了一些功能或模式。

一个简单的程序在 Chrome 浏览器中运行,访问 CW 键控器(基于 Arduino,但这并不重要)。

应用程序向键控器发送命令,并期望两个二进制字节或字符串作为响应(特定格式取决于发送的命令,并不重要)。

如果串行设备(不是 USB/串行适配器,而是 Arduino)由于某种原因错过了该命令,则永远不会发送响应,并且expectResponse()下面的函数将永远不会返回任何数据,也不会抛出任何异常。结果,Reader 保持锁定状态,ReadableStream 因此无法关闭,因此串行端口也无法关闭。

此外,根据应用程序结构,如果其他命令成功发送到键控器,则可能无法读取第二个响应,因为第一个读取器会阻塞流,并且在它被释放之前,无法创建新的读取器。


async function expectResponse( serialPort ) {
   const reader = serialPort.readable.getReader() ;
   let { value, done } = await reader.read() ; // this never returns because no data arrive, not possible to "break"
}

async function disconnect( serialPort ) {
   // ... some cleanup ...
   // naive attempt to unlock ReadableStream before closing 
   await serialPort.readable.getReader().releaseLock() // this will throw …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome serial-port webapi

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

如何禁用某些应用程序服务的动态 WebAPI

我想关闭我的 ABP 项目中特定应用程序服务的自动 WebAPI 生成服务。

abp webapi applicationservice

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

为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

那么,问题是为什么在 using 块中使用 HttpClient 是错误的,但在 WebApi 上下文中呢?

我一直在阅读这篇文章“不要阻止异步代码”。其中我们有以下示例:

public static async Task<JObject> GetJsonAsync(Uri uri)
{
  // (real-world code shouldn't use HttpClient in a using block; this is just example code)
  using (var client = new HttpClient())
  {
    var jsonString = await client.GetStringAsync(uri);
    return JObject.Parse(jsonString);
  }
}

// My "top-level" method.
public class MyController : ApiController
{
  public string Get()
  {
    var jsonTask = GetJsonAsync(...);
    return jsonTask.Result.ToString();
  }
}
Run Code Online (Sandbox Code Playgroud)

评论// (real-world code shouldn't use HttpClient in a using …

c# using httpclient webapi

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

如何使用 XUnit 对 Web API 控制器进行单元测试

我正在尝试使用 XUnit 对 Web API 中的控制器内的方法进行单元测试。该方法的作用是从数据库中按 ISBN 获取单个书名。我在单元测试期间遇到的问题是,我不确定如何插入必须执行测试的虚拟数据,以及 Assert 函数如何工作。

标题控制器.cs

[ApiController]
[Route("titlecontroller")]
public class TitleController : Controller
{
    private IGtlTitleRepository _gtlTitleRepository;

    public TitleController(IGtlTitleRepository gtlTitleRepository)
    {
        _gtlTitleRepository = gtlTitleRepository;
    }

    [Route("getTitle/{ISBN}")]
    [HttpGet()]
    public GtlTitle GetTitle(string ISBN)    
    {
        return _gtlTitleRepository.GetTitle(ISBN);
    }
}
Run Code Online (Sandbox Code Playgroud)

IGtlTitleRepository.cs

    public interface IGtlTitleRepository
{
    GtlTitle GetTitle(string ISBN);
}
Run Code Online (Sandbox Code Playgroud)

MockGtlTitleRepository.cs

    public class MockGtlTitleRepository : IGtlTitleRepository
{
    private readonly string _connection;
    public MockGtlTitleRepository(IOptions<ConnectionStringList> connectionStrings)
    {
        _connection = connectionStrings.Value.GTLDatabase;
    }


    private List<GtlTitle> _titleList;

    public GtlTitle GetTitle(string ISBN)
    {
        using (var connection …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing xunit webapi

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

验证 SendGrid 的签名事件 Webhook?

我正在尝试从此链接实施验证。

https://sendgrid.com/docs/for-developers/tracking-events/getting-started-event-webhook-security-features/#the-signed-event-webhook

我不想要其中的 OAuth 部分,而是使用公钥和标头来验证数据。我看过很多与 SendGrid 的 Event Webhook 相关的帖子,但没有任何内容可以验证。

这就是我尝试过的,但显然有些问题。我真的不知道如何将文档中的代码转换为 C#。我不确定请求中的每条数据应该放在哪里。有人对此有任何见解吗?

public async Task<IHttpActionResult> EventsHook()
{
    IEnumerable<string> signatureFromHeader = Request.Headers.GetValues("X-Twilio-Email-Event-Webhook-Signature");
    byte[] timeStampBytes = Encoding.ASCII.GetBytes(Request.Headers.GetValues("X-Twilio-Email-Event-Webhook-Timestamp").First());
    byte[] body = await Request.Content.ReadAsByteArrayAsync();
    byte[] payloadHash = timeStampBytes.Concat(body).ToArray();
    byte[] signatureByteArray = Convert.FromBase64String(signatureFromHeader.First());
    var publicKey = "{myPublicKey}";
    byte[] publicKeyBytes = Convert.FromBase64String(publicKey);

    var ecdsaParams = new ECParameters
    {
        D = publicKeyBytes
    };

    using (var ecdsa = ECDsa.Create(ecdsaParams))
    {
        if (ecdsa.VerifyData(payloadHash, signatureByteArray, HashAlgorithmName.SHA256))
        {
            return Ok();
        }
        return StatusCode(System.Net.HttpStatusCode.Forbidden);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# sendgrid ecdsa webapi

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

当包含 Ice 服务器时,WebRTC 陷入连接状态(远程候选者甚至通过 LAN 也会导致问题)

我在尝试解决之前的问题时暂时创建了一个RTCPeerConnectionwithout any 。iceServers

let peer = new RTCPeerConnection();
Run Code Online (Sandbox Code Playgroud)

这在我的本地网络上运行得很好。

但是,不在同一网络上的设备(例如,4G 上的移动设备)将无法连接。我记得我必须iceServersRTCPeerConnection构造函数中添加一些内容。

let peer = RTCPeerConnection(
  {
    iceServers: [
      {
        urls: [
          "stun:stun1.l.google.com:19302",
          "stun:stun2.l.google.com:19302",
        ],
      },
      {
        urls: [
          "stun:global.stun.twilio.com:3478?transport=udp",
        ],
      },
    ],
    iceCandidatePoolSize: 10,
  }
);
Run Code Online (Sandbox Code Playgroud)

这样做之后,我的 WebRTC 连接就一直停留在连接状态。即使在我的本地网络上,也没有一个连接成功。(不再是这种情况,请参阅下面的编辑2

这是连接的状态:

  • 冰候选人聚集在一起。
  • 报价/答案已创建。
  • 报价/答复和冰候选已通过我的信令服务成功发送。
  • 我成功设置了远程和本地描述,并在两端添加了冰候选项。
  • 连接保持连接状态。
  • 大约 30 秒后,连接超时并失败。

编辑:看起来当我留空时iceServers,连接仍然收集一个ice候选者,所以我假设我的浏览器(chrome)提供了一个默认的ice服务器。在这种情况下,只有我的自定义 Ice 服务器(如上所示)导致了问题,而不是浏览器默认值。


编辑 2:新观察

我已经添加了大量的日志记录,每当我包含以下内容时,我都会注意到一些内容iceServers

每当对等点 A 在一段时间内第一次发起与对等点 B 的连接时,对等点 B 就会收集两个ice 候选者:1 个本地主机候选者和 1 …

javascript webrtc webapi

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

热巧克力认证连接用户

我的 GraphQL 查询类中有一个非常简单的 IQueryable。我想要完成的是获取请求聊天信息的授权用户。将 context.Chats 更改为 context.Chats.Where(i => i.UserId == RequestingId)。所以你无法从我的 API 获取私人聊天。如果您未获得授权,那么您将始终收到一个空列表。我已经了解了如何使用 MVC 控制器执行此操作,但这不是所需的结果。

public class Query
{
    [UseDbContext(typeof(AppDbContext))]
    [UseFiltering]
    [UseSorting]
    public IQueryable<Chat> GetChats([ScopedService] AppDbContext context)
    {
        return context.Chats
           .Include(m => m.Messages)
           .Include(r => r.Recipients);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# graphql .net-5 hotchocolate webapi

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

&lt;strong&gt;、&lt;cite&gt;、&lt;article&gt; 等的 HTMLElement 类型

HTMLElement元素的类型是什么,例如

  • <strong>
  • <cite>
  • <article>
  • 和许多其他人

?

根据 MDN 的HTML 元素参考,元素比下面的类型多得多HTMLElement(请参阅此列表)。

我正在使用 TypeScript 对元素进行一些处理,并希望使用最具体的类型存储对它们的引用。虽然许多其他元素都清晰命名类型(例如HTMLDivElementHTMLImageElementHTMLTableElement),似乎我上面列出的元素不会有任何相应的类型。

html javascript dom typescript webapi

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

Javascript 运行时如何将 setTimeout() 识别为 WEB API?

当 javascript 运行时找到 setTimeout() 方法时,会将其发送到事件表。运行时如何知道 setTimeout() 是 WEB API?它是否首先在当前上下文中查找 setTimeout() 方法,如果没有找到,则将其假定为 WEB API?

javascript settimeout webapi

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