2

如何获取控制器的路径?例如,我可以像这样获取 HtmlHelper 的路径:

    private static string GetVirtualPath(HtmlHelper htmlhelper)
    {
        string virtualPath = null;
        TemplateControl tc = htmlhelper.ViewDataContainer as TemplateControl;

        if (tc != null)
        {
            virtualPath = tc.AppRelativeVirtualPath;
        }

        return virtualPath;
    }
4

4 回答 4

5

编辑:以下将给出带有控制器的程序集的路径以及带有控制器动作的类的类型名称。也许这些的组合会给你你所追求的,亚伦?

string assemblyPath = Assembly.GetExecutingAssembly().CodeBase;
string typeName = this.GetType().FullName;

例如,它们会产生类似的东西

file:///C:/Projects/TestApp/TestApp.UI/bin/TestApp.UI.DLL
TestApp.UI.Controllers.TestController

假设您以“标准”ASP.NET MVC 方式放置和命名控制器,则上述某种组合可能会为您提供 C# 文件的正确完整路径:

C:/Projects/TestApp/TestApp.UI/Controllers/TestController.cs

或相对路径:

Controllers/TestController.cs

以下将给出控制器动作的路线:

1) string path = Request.Url.AbsolutePath

2) string appPath = Request.ApplicationPath;
   string absPath = Request.Url.AbsolutePath;
   string path = appPath.Length <= 1 ? 
       absPath : absPath.Replace(appPath, "");

请求 TestController 的 Index 操作的示例(http://localhost:50027/Test/Index):以上返回

1) /Test/Index
2) /Test/Index

对于基本 url 为http://localhost:50027/blog的网站,例如请求 TestController 的 Index 操作 ( http://localhost:50027/blog/Test/Index ):以上返回

1) /blog/Test/Index
2) /Test/Index
于 2009-04-21T19:04:21.660 回答
1

您在那里的方法将返回视图的相对 aspx 文件名 - 这不是 HtmlHelper 的真正位置。

当你说你想要一个控制器的路径时,你实际上是什么意思?您的 Controller 是在某处的程序集中编译的类。是否要获取 Controller 的源 .cs 文件的位置?还是有什么不同?

于 2009-04-21T18:59:20.517 回答
0

Aaron,听起来你在写一个 quine,呵呵,但我想这是为了一些单元测试脚手架之类的?也许您真的想为您正在做的一些事情使用构建脚本?您可以在项目的属性页面中放置一些命令,以便在构建时在您的控制器目录上执行一些进程?对不起,如果这根本不是你想要做的。

于 2009-04-23T03:47:43.920 回答
0

您可以像这样获取控制器的名称

Url.RequestContext.RouteData.Values["controller"]

获取控制器名称后,您可以使用该方法解析路径

ResolveClientUrl("~/<ControllerName>") 
于 2009-04-21T19:15:39.120 回答