1

我正在将 JavaScript 库集成到 ASP.NET MVC3 Web 应用程序中。该库假定它将安装在引用它的页面旁边,因此它使用文档相对 URL 来查找其组件。

例如,默认目录布局看起来像

container-page.html
jslibrary/
    library.js
    images/
        icon.png
    extensions/
        extension.js
        extension-icon.png

但是,我想从/Home/edit. 我默认安装库Scripts\jslibrary\ 当我在视图中引用库时Views\Home\edit.cshtml,库的文档相关链接如

images/icon.png 

最终要求

http://localhost/Home/images/icon.png

这会导致找不到文件 (404) 错误。如何构建要查找的路线

{anyControllerName}/images/{anyRemainingPathInfo}

并提供服务

http://localhost/Scripts/jslibrary/images/{anyRemainingPathInfo} 

?

(全面披露:我仍在生产中使用 IIS 6,并且很快就没有太多机会进入 IIS7,所以如果在 IIS 级别上做得更好,请考虑 IIS6。谢谢!)

4

3 回答 3

1

您可以创建一个控制器来处理您的重定向逻辑 - 例如“图像”控制器。在 Global.asax 文件中注册一个全局路由,使用模式(更多关于这种类型的模式在这里

routes.MapRoute(

    "Images", // Route name

     "{xyz}/{controller}/{path}", // URL with parameters

     new {controller = "Images", action = "Index", path= UrlParameter.Optional} // Parameter defaults);

在您的控制器中:

public ActionResult Index(string path)
{
    //format path, parse request segments, or do other work needed to Id file to return... 

    return base.File(path, "image/jpeg"); //once you have the path pointing to the right place...
}

不确定这个解决方案是否适合你,希望我能想出更优雅的东西。祝你好运!

于 2012-08-06T21:11:06.547 回答
0

除了重写库并让它检查适当的目录之外,我能想到的唯一解决方案是将视图、库和支持文件包含在库可以访问的目录结构中。这当然会打破 MVC 对查找视图的配置方式的约定,因此您必须编写自定义覆盖 Razor 查找视图的方式,这不太复杂,但您可能会让自己的生活变得更加困难道路取决于您的应用程序。你的电话是两个邪恶中较小的一个:)(我会去修图书馆)

于 2012-08-13T13:24:26.997 回答
0

做一个帮助功能

@functions{

        public string AbsoluteUrl(string relativeContentPath)
        {
            Uri contextUri = HttpContext.Current.Request.Url;

            var baseUri = string.Format("{0}://{1}{2}", contextUri.Scheme,
               contextUri.Host, contextUri.Port == 80 ? string.Empty : ":" + contextUri.Port);

            return string.Format("{0}{1}", baseUri, VirtualPathUtility.ToAbsolute(relativeContentPath));
        }
    }

打电话

@AbsoluteUrl("~/Images/myImage.jpg") <!-- gives the full path like: http://localhost:54334/Images/myImage.jpg -->

这个例子来自 https://dejanvasic.wordpress.com/2013/03/26/generating-full-content-url-in-mvc/

于 2015-01-02T09:39:46.673 回答