[英]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.