运行时ASP.net上的IIS ApplicationName

时间:2010-12-07 19:36:41

标签: c# asp.net asp.net-mvc

我正在ASP.NET MVC应用程序中运行时构建一个URL。这样做的最佳方式是什么?

 url = string.Format("/controller/action/{0}/{1}/{2}/{3}/{4}", request.Id,
                                           builds.Release, builds.Localization.Value, builds.Label, SessionId);

URL最终用于将AJAX调用回控制器操作。问题是在我的部署环境中,此应用程序不是root用户,因此URL无效。

{host} \ url< - 这就是我所拥有的。 {host} {applicationname} \ url< - 这就是我需要的。

所以我打算在运行时解析应用程序名称并使用它来构造url。我怎样才能获得应用程序名称?这是最好的方式吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

最好的方法是使用URL helper Action方法:

Url.Action("SomeAction", "SomeController", new { 
    id = request.Id, 
    release = builds.Release, 
    localization = builds.Localization.Value, 
    label = builds.Label, 
    sessionId = SessionId 
}); 

这显然意味着您拥有正确的路线集(采用idreleaselocalizationlabelsessionId令牌):

routes.MapRoute(
    "MyRoute",
    "{controller}/{action}/{id}/{release}/{localization}/{label}/{sessionId}",
    new { controller = "SomeController", action = "SomeAction" }
);

备注:如果您不想使用网址编码等问题,请不要在处理网址时使用字符串连接和/或string.Format ...

备注2:UrlHelper的一个实例在每个控制器操作中都可用作控制器的Url属性,在每个视图和每个帮助器中。

答案 1 :(得分:1)

您应该将Request.ApplicationPath作为网址的第一部分。

url = string.Format("{0}controller/action/{1}/{2}/{3}/{4}/{5}", Request.ApplicationPath, request.Id,
                                           builds.Release, builds.Localization.Value, builds.Label, SessionId);

您可能还想查看VirtualPathUtility类。具体地

VirtualPathUtility.ToAbsolute()
相关问题