UrlHelper.Action返回空字符串

时间:2013-03-25 16:43:37

标签: urlhelper

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

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

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

非常感谢!

0 个答案:

没有答案