Моя команда настраивает e2e tests
для нашего мобильного приложения, и они хотели бы посмеяться над некоторыми ответами (от простых, таких как 200
, 500
, медленный ответ API и т. Д. До более сложных вещей).
В мобильном приложении URL нашего сервера является глобальным VAR, и для каждого запроса мы добавляем конкретный маршрут, например:
var serverURL = "https://api.domain.com/"
var getSavedURL = serverURL + "api/saved/GetSaved"
Так как гораздо проще обновить один глобальный var (то есть serverURL)при запуске e2e
для маршрутов e2e
необходимо искать что-л.вот так (например, для насмешливой ошибки):
var serverURL = "https://api.domain.com/e2e/error/"
var getSavedURL = serverURL + "api/saved/GetSaved"
По сути, мы просто изменяем serverURL
, а URL для конкретного вызова API остается прежним.
Вот что я получил намомент:
В WebApiConfig
:
public static void Register(HttpConfiguration config)
{
// reporting api versions will return the headers "api-supported-versions" and "api-deprecated-versions"
config.AddApiVersioning(
o =>
{
o.AssumeDefaultVersionWhenUnspecified = true;
o.ReportApiVersions = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
config.Routes.MapHttpRoute(
"e2e_ERROR",
"e2e/error/api/{controller}/{action}"
);
config.Routes.MapHttpRoute(
"VersionedUrl",
"v{apiVersion}/{controller}/{action}/{id}",
new { id = RouteParameter.Optional },
new { apiVersion = new ApiVersionRouteConstraint() });
config.Routes.MapHttpRoute(
"Default",
"api/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
var appXmlType =
config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(
t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.EnableSystemDiagnosticsTracing();
}
Самая важная часть:
config.Routes.MapHttpRoute(
"e2e_ERROR",
"e2e/error/api/{controller}/{action}"
);
Вот код из моего макета e2e
контроллер:
[ApiVersion("3.0")]
[RoutePrefix("e2e/error/api/saved/")]
public class SavedE2EController : ApiController
{
[HttpGet]
public IHttpActionResult GetSaved()
{
return Ok();
}
}
А вот код из контроллера, который подвергается насмешке:
[Authorize]
[ApiVersion("3.0")]
[RoutePrefix("api/saved")]
public class SavedController : ApiController
{
[HttpGet]
[ActionName("GetSaved")]
public async Task<HttpResponseMessage> GetSaved()
{
// some code here
}
}
Происходит то, что второй контроллер - SavedController
(тот, который содержит реальный код) получает удар при входеэтот URL:
http://localhost:7291/e2e/error/api/saved/GetSaved
Я перепробовал множество других конфигураций, но безуспешно, например, изменил RoutePrefix на:
[RoutePrefix("~e2e/error/api/saved/")]
[RoutePrefix("~api/saved")]
Или вообще удалил RoutePrefix
, или добавил:
[Route("")]
[Route("~e2e/error/api/saved/GetSavedWorkouts")]
К e2e
методу.
Может кто-нибудь помочь мне разобраться в этом?