2016-08-11 2 views
0

Я пытаюсь проверить веб-маршруты api, которые существуют inisde в моей области администрирования.Area webapi route не решен

Это определение маршрута в районе

[HttpPut] 
    [Route("timezone/put/{timezone}", Name = "PutTimeZone")] 
    [AllowAnonymous] 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutTimeZone(string timezone) 
    { 
    /*Action body*/ 
    } 

У меня есть префикс маршрута, как так [RoutePrefix ("админы/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'.

я прочитал в route tester wiki page

Если вы используете MVC области, то до тех пор, пока вы используете стандартное расположение пространств имен, имя области будет извлечено из вашего имени типа контроллера и испытание на область выбранный маршрутом. , например. если полное имя вашего контроллера - MyWebApp.Areas.Blog.CommentController, то ожидаемое название области будет be "Blog".

Но, откровенно говоря, это не дает мне никаких указаний относительно того, что делать, чтобы пройти мой тест. Мой вопрос - что мне не хватает?

ответ

1

Попробуйте заменить [RoutePrefix("admins/misc")] на [RouteArea("Administration",AreaPrefix = "admins/misc")] или объединить оба вместе с [RouteArea("Administration",AreaPrefix = "admins"),RoutePrefix("misc")].

Edit: Я скачал источник для MvcRouteTester библиотеки и пытался отладить ее, используя почти тот же самый пример, как вы предоставили, и это похоже, что есть проблема с самой библиотекой.

Особенность: один метод Common.Verifier.VerifyExpectations утверждает, что фактическая площадь ожидаемой область expected.Area матчей точки маршрута actual.Area, но нет предыдущего кода, который устанавливает фактическое свойство области на любое значение (хотя он установлен контроллер и свойство действий в ApiRoute.Generator.ReadRequestProperties).

Так что я полагаю, что в текущем состоянии (во время этого поста) библиотека просто не поддерживает области для WebApi. Я предлагаю вам открыть проблему на странице github MvcRouteTester со ссылкой на этот пост.

+0

но область маршрута специально предназначена для Asp.net Mvc, и, похоже, не вариант Webapi, правильно ли он используется внутри контроллера webapi. – Cizaphil

+0

все равно попытался, и тест по-прежнему терпит неудачу с тем же сообщением об исключении, как показано выше. – Cizaphil

+0

Я этого не понимал, и я не уверен, что ответ, извините. До сих пор я никогда не пытался использовать ApiController. Другая вещь, которая приходит на ум, является тем, что является вашим пространством имен ApiController? Если я правильно понимаю предоставленные вами документы wiki, ожидаемое пространство имен будет 'YourProjectName.Areas.Administration'. Можете ли вы проверить это? – davke