2010-11-27 41 views
24

如何从C#代码生成绝对网址?ASP.NET MVC从C#代码创建绝对网址代码

我想生成一个这样的网址:localhost/{controller}/{action}/{id}。有没有办法在c#中做到这一点,就像它可以在视图中做到的一样?

它不会在控制器内部产生,而是在ViewModel内部产生。

回答

66
string absUrl = Url.Action("Index", "Products", null, Request.Url.Scheme); 

只需添加Request.Url.Scheme。它所做的是将协议添加到强制它生成绝对URL的url中。

+1

谢谢,这个隐藏得很好,我差点使用`Url.RouteUrl`。 – Peter 2012-04-24 14:10:24

0

如果你不想以“建”的网址,只希望当前页面的完整路径,这将这样的伎俩

Context.Server.UrlEncode(Context.Request.Url.AbsoluteUri)

我知道这不是优雅作为一个扩展方法,但共享它用于教育目的

0

至于最新更新MVC的想法,你可以使用下面overloadUrl.Action

string url=Url.Action("ActionName", "Controller", 
         new RouteValueDictionary(new { id= someid }), 
                 //url param 
         HttpContext.Request.Url.Scheme, 
         HttpContext.Request.Url.Host); 

产生

http://localhost:port/Controller/ActionName?id=someid