我正在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。我怎样才能获得应用程序名称?这是最好的方式吗?
谢谢!
答案 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
});
这显然意味着您拥有正确的路线集(采用id
,release
,localization
,label
和sessionId
令牌):
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()