Я использую этот код:маршрутизации и интеграционное тестирование WebAPI через 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();
}
}
Вдохновленный this, который также содержит соответствующие ValuesController. Я заметил, что мне пришлось адаптировать маршрутизацию:
configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
по одному в моем WebApiConfig. Тем не менее, когда я пытаюсь получить доступ к Action с маршрутизацией атрибутов следующим образом:
Route("Calculator/AddTwoNumbers/a/{a}/b/{a}")]
public IHttpActionResult AddTwoNumbers(PayLoad payLoad)
Я получаю ошибку 404 - Не найдена. Должен ли я также определять эту декларативную маршрутизацию? Если это так, тестирование интеграции кажется довольно утомительным. Любая обратная связь будет очень оценена. Благодарю.
PS:
Я пробовал:
configuration.MapHttpAttributeRoutes();
, не похоже, чтобы помочь
Был ли вы «MapHttpAttributeRoutes» до или после добавления маршрута по умолчанию? (вам нужно сделать это раньше) – crush
благодарит за комментарий. после. – cs0815
Спасибо. Это исправлено, пожалуйста, напишите ответ, если хотите. – cs0815