当前位置: 首页 > 知识库问答 >
问题:

引发内容流错误的.NET 5异常

卫子平
2023-03-14

测试检查的代码中抛出的两个异常示例:

if (request.GroupId <= 0)
{
    throw new BadRequestException($"A valid {nameof(Data.Models.Group)} Id must be provided.");
}

var group = await Database.Groups.FindAsync(request.GroupId);
if (group == null)
{
    throw new EntityNotFoundException($"{nameof(Data.Models.Group)} not found.");
}

使用上述代码,当运行测试时,任何BadRequestException都会通过,但任何需要EntityNotFoundException类提供NotFound响应的测试都会产生以下错误:

Exception Message: 
        Test method MyProject.Test.Tests.Integration.Group.DeleteGroupTests.DeleteGroup_IdDoesNotExist_NotFound threw exception: 
        System.Net.Http.HttpRequestException: Error while copying content to a stream. ---> System.IO.IOException:  ---> MyProject.Data.Exceptions.EntityNotFoundException: Group not found.
      Stack Trace: 
        DeleteGroupCommandHandler.Handle(DeleteGroupCommand request, CancellationToken cancellationToken) line 40
        RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
...

EntityNotFoundException-失败

public class EntityNotFoundException : ExceptionBase
{
    private static string DefaultMessageHeader => "Not found";

    public override HttpStatusCode StatusCode => HttpStatusCode.NotFound;

    public EntityNotFoundException(string message, string messageHeader = null)
            : base(message, messageHeader ?? DefaultMessageHeader) { }
}
public class BadRequestException : ExceptionBase
{
    private static string DefaultMessageHeader => "Bad Request";

    public override HttpStatusCode StatusCode => HttpStatusCode.BadRequest;

    public BadRequestException(string message, string messageHeader = null)
            : base(message, messageHeader ?? DefaultMessageHeader) { }
}

测试:

// FAILS
[DataTestMethod]
[DataRow(int.MaxValue)]
public async Task DeleteGroup_IdDoesNotExist_NotFound(int groupId)
{
    var response = await Client.DeleteAsync($"/api/groups/{groupId}");
    response.StatusCode.Should().Be(HttpStatusCode.NotFound);
}

// PASSES
[DataTestMethod]
[DataRow(0)]
[DataRow(-1)]
public async Task DeleteGroup_InvalidId_BadRequest(int groupId)
{
    var response = await Client.DeleteAsync($"/api/groups/{groupId}");
    response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
}

共有1个答案

吴炎彬
2023-03-14

找到了修复测试的解决方案,但仍然不确定为什么错误只发生在EntityNotFoundException异常类而不发生其他异常类。

如果有人知道为什么下面的代码修复了失败的测试,我很想听听。

解决方案是指定HttpCompletionOption.ResponseHeadersRead标志,该标志在DeleteAsync中不可用,因此切换到SendAsync

using var response = await Client.DeleteAsync($"/api/groups/{groupId}");
using var response = await Client.SendAsync(new HttpRequestMessage(HttpMethod.Delete, $"/api/groups/{groupId}"), HttpCompletionOption.ResponseHeadersRead);
 类似资料:
  • 问题内容: 我正在尝试解析任何给定页面的HTML转储。我使用了HTML Parser ,还尝试了JSoup进行解析。 我在Jsoup中找到了有用的功能,但调用时却收到403错误 我尝试使用HTTPClient来获取html转储,并且对于相同的url成功。 为什么JSoup会为403提供相同的URL,而该URL正在提供来自Commons HTTP客户端的内容?难道我做错了什么?有什么想法吗? 问题答

  • 我有一个包含属性的对象,该属性是包含两个字符串属性的对象列表。我的目标是将此映射的键与另一个包含字符串属性的对象进行比较。 为了更清楚我的请求包含地图: 我的sharePointDriveResponse包含以下列: 在这个阶段,我实现了一些工作正常的东西: 我的问题如下: 在这里传输数据时是否可能引发异常 在示例中:我发送一个创建文档的请求,并传递一个不允许文档使用但允许其他内容类型使用的字段。

  • 此代码的输出是 这意味着异常将由<代码>接收器重新引发。下一步(i) 在推送方法和非推送错误反应通道中。为什么?

  • 原因:mpl.java:1482无法使受保护的本机org.powermock.reflect.internal.对象mpl.findOmpl.java:862()抛出org.powermock.reflect.internal.CloneNotSupport异常可访问:模块mpl.do不会打开mpl.java:822到未命名的模块@5be6e01c在org.powermock.reflect.in

  • 我有一个异步函数,它将一些数据插入数据库(使用Mariadb)。由于重复的唯一键,此插入可能会失败,因此它会抛出错误(实际上确实如此),但当我尝试再次抛出它以通过Promise捕获它时,它不起作用;它似乎总是以成功的案例结束,即使它抛出了错误。 我尝试改变then/catch顺序,我使用了< code > reject(err);而不是< code >抛出err但是这些都不起作用。 这是POST声

  • 你有什么想法吗??我不知道该怎么办了:/ 13449[MyScheduler_Worker-1]错误org.quartz.core.jobrunshell-Job group1.jobreport引发了一个未处理的异常:java.lang.nullpointerexception at com.changes.bean.reportsbean.createpdfCriticalChanges(re