管理用の領域 (areaname = 'admin') を持つ ASP.NET MVC 3 WebApp があります。
管理領域のページ (Razor => Index.cshtml) で、次のように呼び出します。
@Html.RouteLink("Preview", Resources_Blog.Route_Name_StaticPages, new { pagename = page.Slug, area = "" }, new {target = "_blank", Request.Url.Scheme})
ルートは、global.asax で次のように宣言されます。
routes.MapRoute(
Resources_Blog.Route_Name_StaticPages, // Routename
Resources_Blog.Route_Url_StaticPages + "/{pagename}", // URL with parameters
new { controller = "Home", action = "Page", page = UrlParameter.Optional, area = "" }, // Defaults
new[] { "My.Namespace.Controllers" }
);
リソースは次のとおりです。
Route_Name_StaticPages = "StaticPages"
Route_Url_StaticPages = "static"
ページがレンダリングされるか、レンダリングする必要がある場合、次の例外が発生します。
System.Web.HttpException (0x80004005): Cannot use a leading .. to exit above the top directory.
at System.Web.Util.UrlPath.ReduceVirtualPath(String path)
at System.Web.Util.UrlPath.Reduce(String path)
at System.Web.HttpResponse.ApplyAppPathModifier(String virtualPath)
at System.Web.Routing.RouteCollection.NormalizeVirtualPath(RequestContext requestContext, String virtualPath)
at System.Web.Routing.RouteCollection.GetVirtualPath(RequestContext requestContext, String name, RouteValueDictionary values)
at System.Web.Mvc.RouteCollectionExtensions.GetVirtualPathForArea(RouteCollection routes, RequestContext requestContext, String name, RouteValueDictionary values, Boolean& usingAreas)
at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
at System.Web.Mvc.HtmlHelper.GenerateLinkInternal(RequestContext requestContext, RouteCollection routeCollection, String linkText, String routeName, String actionName, String controllerName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes, Boolean includeImplicitMvcValues)
at System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper htmlHelper, String linkText, String routeName, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes)
残念ながら、例外は開発システムではなくライブシステムでのみスローされるため、実際にデバッグすることはできません。IIS7です。
また、area-parameter なしで RouteLink-method を呼び出そうとしましたが、例外もスローされました。
Html.RouteLink("Preview", Resources_Blog.Route_Name_StaticPages, new { pagename = page.Slug, area = "" }, new {target = "_blank", Request.Url.Scheme})
別の試みは RouteUrl を呼び出すことでしたが、これも失敗しました:
<a target="_blank" href="@Url.RouteUrl(Resources_Blog.Route_Name_StaticPages, new { pagename = page.Slug })">@Resources_Administration.Pages_StaticPage_Show</a>
誰か助けてくれませんか?
IIS 構成の問題ですか、それとも領域の構成ミスですか?