gpt4 book ai didi

asp.net-web-api - AttributeRouting 不适用于 HttpConfiguration 对象来编写集成测试

转载 作者:行者123 更新时间:2023-12-04 05:52:03 25 4
gpt4 key购买 nike

我正在按照此处概述的想法创建一些集成测试:
http://www.strathweb.com/2012/06/asp-net-web-api-integration-testing-with-in-memory-hosting/

当我尝试从手工制作的 HttpConfiguration 对象注册路由时,出现以下错误:
“具有路由模板 'api/Contacts/{id}' 的路由上的约束条目 'inboundHttpMethod' 必须具有字符串值或实现了 'IHttpRouteConstraint' 的类型。

示例代码:
Controller :

 [RoutePrefix("api")]
public class ContactsController : ApiController
{
[GET("Contacts/{id}",RouteName="GetContactsById")]
public ContactDTO Get(int id)
{
return new ContactDTO{ ID =1, Name="test"};
}
}
}

测试类(MSTest):
 [TestClass]
public class ContactsTest
{
private string _url = "http://myhost/api/";
private static HttpConfiguration config = null;
private static HttpServer server = null;
private HttpRequestMessage createRequest(string url, string mthv, HttpMethod method)
{
var request = new HttpRequestMessage();
request.RequestUri = new Uri(_url + url);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));
request.Method = method;
return request;
}
private HttpRequestMessage createRequest<T>(string url, string mthv, HttpMethod method, T content, MediaTypeFormatter formatter) where T : class
{
HttpRequestMessage request = createRequest(url, mthv, method);
request.Content = new ObjectContent<T>(content, formatter);

return request;
}

[ClassInitializeAttribute]
public static void ClassInitialize(TestContext ctx)
{
config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.Services.Replace(
typeof(IDocumentationProvider), new DocProvider());

config.Services.Replace(
typeof(IApiExplorer),
new VersionedApiExplorer(config));

config.Services.Replace(
typeof(IHttpControllerSelector),
new VersionHeaderVersionedControllerSelector
(config)
);
AttributeRoutingHttpConfig.RegisterRoutes(config.Routes);
WebApiConfig.Register(config);
server = new HttpServer(config);
}

public static void ClassCleanup()
{
config.Dispose();
server.Dispose();
}

[TestMethod]
public void RetrieveContact()
{
var request = createRequest("Contacts/12","application/json",HttpMethod.Get);
var client = new HttpClient(server);

using (HttpResponseMessage response = client.SendAsync(request).Result)
{
Assert.IsNotNull(response.Content);
}
}
}

错误发生在“client.SendAsync”行上。我检查了 config.Routes 和“inboundHttpMethod”的“Constraints”的数据类型是 AttributeRouting.Web.Http.WebHost.Constraints.InboundHttpMethodConstraint
似乎需要一个字符串值。
任何帮助将非常感激。

最佳答案

有同样的问题。在这里找到答案:

https://github.com/mccalltd/AttributeRouting/issues/191

你需要更换

AttributeRoutingHttpConfig.RegisterRoutes(config.Routes);


config.Routes.MapHttpAttributeRoutes(cfg =>
{
cfg.InMemory = true;
cfg.AutoGenerateRouteNames = true;
cfg.AddRoutesFromAssemblyOf<ContactsController>();// Or some other reference...
});

我发现我也需要 AutoGenerateRouteNames 部分。

关于asp.net-web-api - AttributeRouting 不适用于 HttpConfiguration 对象来编写集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com