繁体   English   中英

使用httpclient和httpserver测试MVC Web API时出现500错误

[英]500 error when test MVC web API using httpclient and httpserver

我引用了这个 httpclient和httpserver来对我的MVC API进行集成测试,但是得到500错误,我可以确保我的操作没有内部错误,因为我可以在Fiddler期间成功请求。 我的代码作为引用程序非常简单,我将其粘贴在下面。 我没有足够的声誉来评论原始问题,因此在这里提出了新问题。

我的控制器动作

[HttpGet]
    [Route("api/InjectDocuments/hello/")]
    public IHttpActionResult Hello()
    {
        return Ok();
    }

我的测试方法

 [TestMethod]
    public async Task InjectDocumentE2ETest()
    {
        var config = new HttpConfiguration();
        //config.MapHttpAttributeRoutes();
        //config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
        WebApiConfig.Register(config);

        using (var server = new HttpServer(config))
        {

            var client = new HttpClient(server);
            //  client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string url = "http://localhost/api/InjectDocuments/hello";

            var request = new HttpRequestMessage
            {
                RequestUri = new Uri(url),
                Method = HttpMethod.Get
            };

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            using (var response = await client.SendAsync(request))
            {
                Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            }
            using (var response = await client.GetAsync(url))
            {
                Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            }
        }
    }

您需要获取有关异常本身的更多信息。 您可以通过打破CLR抛出的每个异常来做到这一点。 为此,请检查调试> Windows>异常设置,然后打开“公共语言运行时异常”

现在,您的测试将以更有用的信息中断。

我的想法是“内存存储不支持事务处理。”

然后可以通过将其添加到内存数据库的配置中来抑制该错误.ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning))

有关该特定错误的更多信息,请检查https://github.com/aspnet/EntityFrameworkCore/issues/2866

但这绝对不是您遭受相同错误的原因。

您应该使用HttpClient默认构造函数进行测试:

var client = new HttpClient();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM