簡體   English   中英

通過自托管進行路由和集成測試webapi

[英]routing and integration testing webapi via selfhosting

我正在使用此代碼:

[Fact]
public void ValueController_WithGetMethos_ShouldReturnValidData_NoBaseClass()
{
    var configuration = new HttpSelfHostConfiguration("http://localhost:64466");
    configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    configuration.Services.Replace(typeof(IAssembliesResolver), new WebApiClassBase.TestAssemblyResolver(typeof(ValuesController)));

            configuration.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

    var server = new HttpSelfHostServer(configuration);
    try
    {
    server.OpenAsync().Wait();

    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost:64466/api/values"),
        Method = HttpMethod.Get
    };

    var client = new HttpClient(server);
    using (HttpResponseMessage response = client.SendAsync(request).Result)
    {
        response.Should().Not.Be.Null();
        response.IsSuccessStatusCode.Should().Be.True();

        string[] result = response.Content.ReadAsAsync<string[]>().Result;

        result.Length.Should().Be.EqualTo(4);
        result[0].Should().Be.EqualTo("http://tostring.it");
        result[1].Should().Be.EqualTo("http://imperugo.tostring.it");
        result[2].Should().Be.EqualTo("http://twitter.com/imperugo");
        result[3].Should().Be.EqualTo("http://www.linkedin.com/in/imperugo");
    }
    }
    finally
    {
    configuration.Dispose();
    server.Dispose();
    }
}

靈感來自 ,其中還包含了相關的ValuesController 我注意到我必須調整路由:

configuration.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

根據我的WebApiConfig中的內容。 但是,當我嘗試使用以下屬性路由訪問動作時:

Route("Calculator/AddTwoNumbers/a/{a}/b/{a}")]
public IHttpActionResult AddTwoNumbers(PayLoad payLoad)

我收到404-找不到錯誤。 我還必須定義此聲明性路由嗎? 如果是這樣,集成測試似乎很繁瑣。 任何反饋將不勝感激。 謝謝。

PS:

我試過了:

configuration.MapHttpAttributeRoutes();

這似乎沒有幫助

您需要先設置AttributeRouting,然后才能配置默認路由。

configuration.MapHttpAttributeRoutes();
configuration.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

按照添加到RouteCollection的順序評估路由。 如果您的默認路由排在第一位,那么它將在屬性路由有機會被匹配之前匹配傳入的路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM