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" });

RouteValues として string.Empty ではなく何らかの文字列を使用すると、両方のマシンでうまく機能します。

この問題は、開発マシンと CI マシンのツールまたはフレームワークの構成またはバージョンが異なることが原因であると思われます。誰でも助けることができますか?

この問題をよりよく理解するために、これはコンテキストです: チームは .Net 3.5、Visual Studio 2010、MVC2 を使用しています。それらを.Net 4.0、Visual Studio 2012、MVC3にアップグレードしました。私のローカル開発マシンではすべて問題ありません。CIサーバーに.Net 4.0とMVC3をインストールしました(Visual Studioと一緒にインストールされるため、開発マシンと同じインストールファイルではありません)。Web サイトは CI サーバーで正常に動作しています。唯一の問題は、AbsoluteAction("action name", "controller name", new {postcode=string.Empty} ) を呼び出したときに "localhost/getaddresses" が返されることを期待する 1 つのスモーク テストが失敗することですが、実際には "localhost "

問題について十分に説明できたことを願っています。: )

どうもありがとう!

4

0 に答える 0