UrlHelper.Action возвращает пустую строку
Очень странная проблема, я потратил часы, но не смог найти в чем именно проблема. У меня есть некоторый код следующим образом:
public static string AbsoluteAction(this UrlHelper urlHelper, string actionName, string controllerName, object routeValues)
{
return ResolveUrl(urlHelper, urlHelper.Action(actionName, controllerName, routeValues));
}
private static string ResolveUrl(UrlHelper urlHelper, string relativeUrl)
{
return new Uri(GetRequestUri(urlHelper), relativeUrl).AbsoluteUri;
}
private static Uri GetRequestUri(UrlHelper urlHelper)
{
return urlHelper.RequestContext.HttpContext.Request.Url;
}
При использовании string.Empty в качестве routeValues "urlHelper.Action(actionName, controllerName, routeValues)" хорошо работает на моей локальной машине разработчика. (Windows 7, IIS 7.5, .Net 4.0, MVC3) Возвращает правильный URL.
Но он возвращает пустую строку на нашем сервере непрерывной интеграции. (Windows Server 2008, IIS 7.0, .Net 4.0, MVC3)
Это конфигурация маршрута:
routes.MapRoute (
"MyRouteName",
"Getaddresses/{} почтовый индекс /",
new {controller = "Address", action = "GetAddresses", postcode = string.Empty},
new {httpMethod = new HttpMethodConstraint ("GET")}, new [] {"My.Package.Controllers"});
Если я использую некоторую строку, а не string.Empty как RouteValues, она хорошо работает на обеих машинах.
Кажется, что проблема вызвана различными конфигурациями или различными версиями инструментов или структур на компьютере разработчика и компьютере CI. Кто-нибудь может помочь?
Чтобы вы лучше поняли эту проблему, это контекст: команда использует.Net 3.5, Visual Studio 2010, MVC2. Я обновил их до.Net 4.0, Visual Studio 2012, MVC3. Все хорошо на моей локальной машине разработчика. Я установил.Net 4.0 и MVC3 на CI-сервер (Не те же файлы установки на машину разработчика, потому что они устанавливаются вместе с Visual Studio). Сайт работает хорошо на CI сервере. Единственная проблема заключается в том, что один тест дыма не пройден, и ожидается, что при вызове AbsoluteAction("имя действия", "имя контроллера", новый {postcode=string.Empty}) возвращается "localhost / getaddresses", но на самом деле это "localhost". "
Надеюсь, я хорошо описал проблему.:)
Большое спасибо!