2014-05-22 184 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