筆者做了一個文件上傳系統,文件上傳后,保存在wwwroot目錄的file文件夾中,並把該文件的路徑保存到數據庫中,
如這樣的一個路徑保存在數據庫:
file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg
上傳成功后,當在home控制器的index頁面中的a標簽中,直接這樣編寫
<a href="@filePath">下載</a>
頁面生成后,鏈接是
http://localhost:53953/file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg
完全沒有問題 可以正常訪問並下載,但是在note控制器的Detils的頁面下,我使用同樣也是這樣的a標簽指向文件
<a href="@filePath">下載</a>
可是就不能正常訪問了 生成的鏈接是
http://localhost:53953/note/Detils/file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg
也就是說鏈接中把控制器名和action名也加進去了 ,是無法正常訪問到文件的,
為什么home和index不會加進去呢? 因為路由中默認的是控制器是home 默認的視圖是index 所以鏈接中是不顯示控制器名和視圖名的
那么,問題出現了 怎么解決?
方法是使用
@Url.Content(filePath)來取代@filePath
就不管是在什么控制器下什么視圖下 鏈接始終不含有控制器視圖的名稱了
同時 需要注意的是,文件路徑的保存格式需要有所變化了,不然也是無法正常鏈接的 需要已/開頭 如下:
/file/b775f487-0127-41e0-9df8-2a5f1624cd87.jpg