我很少有使用 Web API 1 正常工作的集成测试,在升级到 Web API 2 (5.0) 后,它们不起作用,并且在调用以下代码时为我提供了空引用:
string uri = Url.Link(HttpRouteConstants.RouteName, new { param1 =
paramValue1, param2 = paramValue2 });
基本上 Url.Link 找不到路线(至少我认为这是问题所在)。我认为问题出在HttpConfiguration的方式上
从
WebApiConfig.Register(config)
到
GlobalConfiguration.Configure(WebApiConfig.Register);
现在,当使用集成测试设置时,我为HttpServer提供HttpConfiguration实例,我不能调用GlobalConfiguration.Configure(WebApiConfig.Register)之类的东西;但我使用的是旧方法并执行以下WebApiConfig.Register(config),这似乎无法正常工作。仅供参考,我的路由配置被放置在 WebApiConfig 中。
有谁知道任何解决方法?
这是我正在使用的堆栈:
更新
这是联调代码示例
// Create configuration
HttpConfiguration config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.DependencyResolver = new NinjectDependencyResolver(Kernel);
//WebApiConfig.Register(config); Below is the excerpt from WebApiConfig
config.EnableCors((System.Web.Http.Cors.ICorsPolicyProvider)config.DependencyResolver.GetService(typeof(System.Web.Http.Cors.ICorsPolicyProvider)));
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: HttpRouteConstants.ApplicationAPIRouteName,
routeTemplate: CoreRouteConstants.DefaultApplicationControllerRoute + "/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: HttpRouteConstants.DefaultAPIRouteName,
routeTemplate: CoreRouteConstants.DefaultControllerRoute + "/{id}",
defaults: new { id = RouteParameter.Optional }
);
HttpServer server = null;
try
{
server = new HttpServer(config);
}
catch (Exception ex)
{
throw ex;
}
string controller = String.Format("{0}{1}/api/MyController/{2}/", HttpServerBaseAddress, param1, param2);
var client = new HttpClient(Server);
using (HttpResponseMessage response = client.DeleteAsync(controller, new CancellationTokenSource().Token).Result)
{
response.IsSuccessStatusCode.Should().BeFalse();
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
}
//Below is the code from MyController
public virtual async Task<HttpResponseMessage> DeleteAsync([FromUri]object key)
{
HttpResponseMessage response = null;
HttpStatusCode statusCode = HttpStatusCode.OK;
bool result = await Store.DeleteAsync(key);
if (!result)
statusCode = HttpStatusCode.NotFound;
response = Request.CreateResponse<bool>(statusCode, result);
string uri = Url.Link(HttpRouteConstants.ApplicationAPIRouteName, new { param1 = "param1", id = key });
//NOTE: uri is null here as I mentioned
response.Headers.Location = new Uri(uri);
return response;
}
谢谢。
你能分享一下你的集成测试是什么样的吗?我尝试了一个集成测试场景,在那里我能够生成链接,所以我很好奇你的代码是什么样子的。在我的场景中,我没有使用Ninject。
GlobalConfiguration.Configure(WebApiConfig.Register);
确保在所有 Web API 配置完成后调用 HttpConfiguration.EnsureInitialized()。
因此,如果您正在联调用WebApiConfig。在您的联调中注册
,您可以在Web API配置完成后尝试调用HttpConfiation. Ensure初始化()
,看看这是否解决了问题。
考虑以下事项: 我有一个应用模板,一个HeaderTemboard,和参数化的路由集与相同的处理程序(在应用模板)。我希望在没有找到东西的时候能够服务404路线。例如, /CA/SanFrancisco应该由区域查找和处理,而 /SanFranciscoz应该是404。 下面是我如何快速测试路线的。 问题是 /SanFranciscoz总是由区域页面处理,但我希望它是404。此外,如果我向第一个路
我有一个更新网站的任务。本网站使用Symfony2。我试着在我的localhost上模拟网站。 当我尝试使用空方向路径(REQUEST_URI)到达索引页时,Symfony2返回的路由。我尝试运行的url是。 当我使用(例如)时,它也不起作用 怎么了? app/config/routing。yml: app/配置/routing_dev.yml: src/AppBundle/Resources/c
我正在建立一个注册页,当我提交时,我得到一个404没有找到。我正在使用react和express,我认为前端是好的。我缺少了一些后端,或者我的post请求的url错误:AXIOS.post('http://localhost:3000/auth'。如果有人能看到我的错误之处,我将不胜感激。 这是我的路由的registerPost函数。 这些是路线。
我正在使用youtube上的教程制作一个简单的聊天应用程序(github链接:link)。一个潜在的问题是本教程使用2。django的x版本,但我有3.1。7,但我让它工作得很好,很接近,但随后开始出现以下错误: 当查看我的终端时,它一直试图一遍又一遍地重新连接,可能是因为我使用了重新连接WebSocket github javascript代码。当我运行redis-cli并键入ping时,我得到
问题内容: 我想创建一个使用asp.net mvc webapi作为后端和客户端路由(没有cshtml)的SPA angularjs应用程序中的身份验证和授权的示例。以下只是可用于设置完整示例的函数示例。但是我不能一概而论。任何帮助表示赞赏。 问题: 最佳实践是什么:基于Cookie或令牌? 如何创建有角度的承载令牌以对每个请求进行授权? 验证API函数? 如何在客户端上保留登录的登录用户? 示例
null 我已经登记了路线