我正在尝试测试我的管理区域内存在的web api路由。
这是区域中的路线定义
[HttpPut]
[Route("timezone/put/{timezone}", Name = "PutTimeZone")]
[AllowAnonymous]
[ResponseType(typeof(void))]
public IHttpActionResult PutTimeZone(string timezone)
{
/*Action body*/
}
我有一个路由前缀,如 [RoutePrefix(“admins / misc”)]
这是我的路线测试
const string route = "/admins/misc/timezone/put/-120";
RouteAssert.HasApiRoute(_httpConfiguration, route, HttpMethod.Put);
_httpConfiguration.ShouldMap(HttpMethod.Put, route)
.To<MiscApiController>(HttpMethod.Put, x => x.PutTimeZone("-120"));
当我运行测试时,我得到MvcRouteTester.Assertions.AssertionException : Expected 'Administration', got no value for 'area' at url '/admins/misc/timezone/put/-120'.
如果您使用的是MVC区域,那么只要您使用该标准 命名空间的布局,区域名称将从您的提取 控制器类型名称,并根据路径选择的区域进行测试。 例如如果您的控制器的完全限定类型名称是
MyWebApp.Areas.Blog.CommentController
然后预期的区域名称将 是“博客”。
但坦率地说,它并没有给我任何关于做什么的线索,以便让我的测试通过。我的问题是我错过了什么?
答案 0 :(得分:1)
尝试将[RoutePrefix("admins/misc")]
替换为[RouteArea("Administration",AreaPrefix = "admins/misc")]
,或将两者合并为[RouteArea("Administration",AreaPrefix = "admins"),RoutePrefix("misc")]
。
修改强>
我下载了MvcRouteTester
库的源代码,并尝试使用您提供的几乎相同的示例对其进行调试,看起来库本身存在问题。
细节:一个方法Common.Verifier.VerifyExpectations
断言预期区域expected.Area
匹配路由的实际区域actual.Area
,但之前没有代码将实际区域属性设置为任何区域value(虽然它确实在ApiRoute.Generator.ReadRequestProperties
)中设置了Controller和Action属性。
所以我认为在当前状态(在这篇文章发布时),图书馆根本不支持WebApi
的区域。我建议您在MvcRouteTester github页面上打开一个问题,并附上此帖子的链接。