2014-05-22 297 views
1

我正在使用Url.Content("~/something.jpg")在視圖中獲取絕對路徑而沒有問題。在ASP.net MVC控制器中使用Url.Content

我想在控制器中使用它,但它不起作用。它返回"/something.jpg"而不是「http://www.mydomain.com/something.jpg」。

我嘗試了幾個在google和stackoverflow上找不到的技巧。

爲什麼Url.Content()在控制器中不起作用?

任何想法都會有所幫助。

謝謝

+1

波浪'〜'將指向該網站的路線,所以'URL.Content()'是做什麼的預期。你可以發佈你在控制器中使用的代碼嗎? – christiandev

+0

我只做第一條指令:String sUrlPublication = Url.Content(「〜/ Publication/PublicationXML /」);並返回:「/ Publication/PublicationXML /」,但不包含該網站的路由 – user3463579

+0

@ user3463579:是什麼讓您認爲這是不正確的行爲?如果應用程序位於域的根目錄下,那麼'〜'會解析爲'/'。 – David

回答

0

我終於通過使用new Uri(Request.Url, Url.Content("~/something.jpg"));找到了我要找的東西。它返回:

http://www.mydomain.com/something.jpg;

在控制器中僅使用Url.Content()似乎是不夠的。我們必須使用Uri類具有完整的URL。

不管怎麼說,謝謝大家的幫助

0

可能您保存您的網址配置項,它添加到前面...

var sUrlPublication = ConfigHelper.SiteUrl + Url.Content("~/...."); 

的網址添加到AppSettings ...

<appSettings> 
    <add key="SiteURL" value="...."/> 
</appSettings> 

您可以添加一個ConfigHelper類...

using System.Configuration; 

public static class ConfigHelper 
{ 
    public static string SiteUrl 
    { 
     get { return ConfigurationManager.AppSettings["SiteURL"]; } 
    } 
} 

編輯:或由羅伯特

var sUrlPublication = Request.Url.Host + Url.Content("~/...."); 
+0

或者查看請求對象以查找請求將動態進入的域 –

+0

@RobertLevy,如使用'ServerVariables'? – christiandev

+0

不,我的意思是使用Request.Url.Host –

1

提到的我不知道這是爲什麼不控制器工作,可能是因爲Url.Content是一個MVC幫手,但是現在我如何可以做你想做的。如果你想獲得你的文件的絕對路徑,你可以嘗試這樣的事:

var url=Path.Combine(Server.MapPath("../uploads"), "something.jpg"); 

最後,我認爲你需要的是使用Server.Mappath()

+0

它返回我的硬盤驅動器(「d:\ something.jpg」)的路徑,而不是我要找的:完整的URL(「www.mydomain.com/ something.jpg「)。 – user3463579