标准ASP.NET模板中有一个目录" Content
",大多数人似乎都在放入图像和css文件等.
例如stackoverflow的徽标:
(来源:stackoverflow.com)
实际上是指在URL中包含"内容"的服务器路径(只需对任何SO页面执行查看源,您就会看到这一点).所以他们显然是在" content/images/...
" 中存储图像.
src="/Content/Img/stackoverflow-logo-250.png"
Run Code Online (Sandbox Code Playgroud)
编辑:在过去10年的某个时候,他们改变了路径 - 但这就是过去的情况.
我不是特别喜欢这个.我的HTML最终会/content
全面覆盖,而且稍微难以迁移只有/ image的现有页面.幸运的是content
,只要我保存它,我的样式表就不会全部结束content\site.css
.
另一种方法是images
在根目录中放置一个目录,但是你会images
达到相同的级别Controllers
,Views
这是非常可怕的.
我想知道尝试添加这样的重定向规则:
routes.RedirectRoute(
"images rule",
"Images/{*}",
"Content/Images/{1}"); // this is NOT valid code - I made it up
Run Code Online (Sandbox Code Playgroud)
但是这个代码不起作用,因为我刚刚编写了它.我可以使用第三方重定向/重写插件,但我想在MVC模型中保持一切"纯粹".
这个地区还有谁发现了什么?或者每个人都("/content".length)
对他们所服务的每个图像的源中额外的字节感到满意.
老实说,我不认为这真的值得担心......“/Content”对页面大小的贡献非常小。如果您仍然想这样做,这里有一些选择:
如果您在自己的服务器上运行,选项 1 是查看 IIS URL 重写模块: http: //learn.iis.net/page.aspx/460/using-url-rewrite-module/
选项2是使用RedirectResult或ContentResult,在MVC框架中达到相同的效果
首先,将“Images/”下的“catchall”路由映射到控制器操作,如下所示
routes.MapRoute("ImageContent",
"Images/{*relativePath}",
new { controller = "Content", action = "Image" })
Run Code Online (Sandbox Code Playgroud)
确保它位于标准“{controller}/{action}/{id}”路线之上。然后,在 ContentController 中(或者您决定放置它的任何地方):
public ActionResult Image() {
string imagePath = RouteData.Values["relativePath"]
// imagePath now contains the relative path to the image!
// i.e. http://mysite.com/Images/Foo/Bar/Baz.png => imagePath = "Foo/Bar/Baz.png"
// Either Redirect, or load the file from Content/Images/{imagePath} and transmit it
}
Run Code Online (Sandbox Code Playgroud)
我做了一个快速测试,它似乎有效。如果您有任何问题,请在评论中告诉我!
归档时间: |
|
查看次数: |
694 次 |
最近记录: |