HttpClient未将发布数据发送到NancyFX端点

如何解决HttpClient未将发布数据发送到NancyFX端点

我正在对使用NancyFX端点的Web API进行一些集成测试。我让xUnit测试为集成测试创建测试服务器

 private readonly TestServer _server;
    private readonly HttpClient _client;

    public EventsModule_Int_Tester()
    {
        //Server setup
        _server = new TestServer(new WebHostBuilder()
      .UseStartup<Startup>());
        _server.AllowSynchronousIO = true;//Needs to be overriden in net core 3.1
        _client = _server.CreateClient();
    }

在一种“测试方法”中,我尝试了以下方法

   [Fact]
    public async Task Eventtest()
    {
        // Arrange
        HttpResponseMessage expectedRespone = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
        var data = _server.Services.GetService(typeof(GenijalnoContext)) as GenijalnoContext;

        //Get come random data from the DBcontext
        Random r = new Random();
        List<Resident> residents = data.Residents.ToList();
        Resident random_residnet = residents[r.Next(residents.Count)];

        List<Apartment> apartments = data.Apartments.ToList();
        Apartment random_Apartment = apartments[r.Next(apartments.Count)];



        EventModel model = new EventModel()
        {
            ResidentId = random_residnet.Id,ApartmentNumber = random_Apartment.Id

        };

        //Doesnt work
        IList<keyvaluePair<string,string>> nameValueCollection = new List<keyvaluePair<string,string>> {
        { new keyvaluePair<string,string>("ResidentId",model.ResidentId.ToString()) },{ new keyvaluePair<string,string>("ApartmentNumber",model.ApartmentNumber.ToString())}
        };

        var result = await _client.PostAsync("/Events/ResidentEnter",new FormUrlEncodedContent(nameValueCollection));



        //Also Doesnt work 
        string json = JsonConvert.SerializeObject(model,Formatting.Indented);
        var httpContent = new StringContent(json,Encoding.UTF8,"application/json");
        var response = await _client.PostAsync("/Events/ResidentEnter",httpContent);

        //PostAsJsonAsync also doesnt work 

        // Assert
        Assert.Equal(response.StatusCode,expectedRespone.StatusCode);
    }

NancyFX模块确实触发了端点并接收了请求,但没有正文

Img1

我在做什么错?请注意,NancyFX端点将Postman呼叫转换为有效模型没有问题。

NancyFX端点

enter image description here

解决方法

好吧,我修复了它,对于那些好奇的人来说,问题在于NancyFX正文阅读器有时无法正确开始阅读请求正文。那就是流读取位置始终不是0(开始)。

要解决此问题,您需要创建一个CustomBoostrapper,然后重写ApplicationStartup函数,以便您可以设置一个将实体位置设置为0的请求前管道

下面的代码

    protected override void ApplicationStartup(TinyIoCContainer container,IPipelines pipelines)
    {
        base.ApplicationStartup(container,pipelines);
        pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx =>
        {
            ctx.Request.Body.Position = 0;
            return null;
        });


    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?