我正在使用C#中的ASP.NET MVC开发Web应用程序。但我在检索完整或绝对网址时遇到问题。在ASP.NET MVC中,我们得到这样的url。 Url.Content("~/path/to/page")
。它将返回"path/to/page"
。但我想做的是我有一个像这样的字符串 - "~/controller/action"
。
我们认为我的网站域名是www.example.com。如果我使用Url.Content("~/controller/action")
,它将返回“控制器/动作”。我想得到"www.example.com/controller/action"
。我怎么能得到它?
答案 0 :(得分:9)
如果您可以使用控制器/操作名称......
您应该使用Url.Action()
方法。
通常情况下,Url.Action()
会返回类似于您目前期望的内容,仅提供Controller和Action名称:
// This would yield "Controller/Action"
Url.Action("Action","Controller");
但是,当您传入协议参数(即http
,https
等)时,该方法实际上将返回一个完整的绝对URL。为了方便起见,您可以使用Request.Url.Scheme
属性访问适当的协议,如下所示:
// This would yield "http://your-site.com/Controller/Action"
Url.Action("Action", "Controller", null, Request.Url.Scheme);
你可以see an example of this in action here。
如果您只有相对网址字符串...
如果您只能访问相对URL(即~/controller/action
)之类的内容,那么您可能需要创建一个函数来扩展Url.Content()
方法的当前功能,以支持提供绝对URL :
public static class UrlExtensions
{
public static string AbsoluteContent(this UrlHelper urlHelper, string contentPath)
{
// Build a URI for the requested path
var url = new Uri(HttpContext.Current.Request.Url, urlHelper.Content(contentPath));
// Return the absolute UrI
return url.AbsoluteUri;
}
}
如果定义正确,这样您就可以简单地将Url.Content()
来电替换为Url.AbsoluteContent()
,如下所示:
Url.AbsoluteContent("~/Controller/Action")
答案 1 :(得分:0)
以下内容将呈现完整的URL,包括http
或https
:
var url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext);
var fullUrl = url.Action("YourAction", "YourController", new { id = something }, protocol: System.Web.HttpContext.Current.Request.Url.Scheme);
输出
https://www.yourdomain.com/YourController/YourAction?id=something