5

非常奇怪的问题,我花了几个小时但无法找到究竟是什么问题。我有一些代码如下:

    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 服务器 2008、IIS 7.0、.Net 4.0、MVC3)

这是路由配置:
routes.MapRoute(
"MyRouteName",
"getaddresses/{postcode}/",
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。在我的本地开发机器上一切都很好。我在 CI 服务器上安装了 .Net 4.0 和 MVC3(与开发机器的安装文件不同,因为它们与 Visual Studio 一起安装)。该网站在 CI 服务器上运行良好。唯一的问题是一次冒烟测试失败,它期望调用AbsoluteAction("action name", "controller name", new {postcode=string.Empty})时返回"localhost/getaddresses",但实际上是"localhost "

希望我已经很好地描述了这个问题。:)

非常感谢!

4

0 回答 0