非常奇怪的问题,我花了几个小时但却找不到究竟是什么问题。 我有一些代码如下:
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” “
希望我已经很好地描述了这个问题。 :)
非常感谢!