首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MVC3中使用https生成绝对urls?

如何在MVC3中使用https生成绝对urls?
EN

Stack Overflow用户
提问于 2011-04-04 21:27:34
回答 4查看 15.4K关注 0票数 18

我正在使用MVC3并试图从https提供内容,问题是当我调用Url.Content时,文件仍然是使用相对url从http提供的。我以为这个问题已经在MVC3中解决了,但我似乎找不到任何解决方案。有没有人知道这个问题是否在MVC3中就已经解决了,以及如何实现它,或者我需要创建自己的助手方法来根据协议生成绝对Urls吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-04 22:39:26

您可能可以使用VirtualPathUtility.ToAbsolute实现自己的解决方案。可能是这样的:

代码语言:javascript
复制
public static class UrlHelperExtension {
  public static string Absolute(this UrlHelper url, string relativeOrAbsolute) {
    var uri = new Uri(relativeOrAbsolute, UriKind.RelativeOrAbsolute);
    if (uri.IsAbsoluteUri) {
      return relativeOrAbsolute;
    }
    // At this point, we know the url is relative.
    return VirtualPathUtility.ToAbsolute(relativeOrAbsolute);
  }
}

您可以像这样使用它:

代码语言:javascript
复制
@Url.Absolute(Url.Content("~/Content/Image.png"))

(这不是我自己测试的,请随意尝试,让它正常工作。)

这有助于您为内容文件生成绝对URL。为了更改结果URL的方案,您可以创建一个附加的扩展方法,该方法操作给定URL的方案,使其为HTTPS或其他形式。

正如哈立德在评论中指出的那样,类似的扩展方法已经在各种开源项目中可用,你可以使用它们(假设许可证允许)。可以在here中找到一个示例。

票数 28
EN

Stack Overflow用户

发布于 2012-04-05 07:13:30

一种不使用扩展方法或硬编码协议的解决方案,由@BlackTigerX建议:

代码语言:javascript
复制
Url.RouteUrl("Default", new { Action = "About" }, Request.Url.Scheme)

如以下文章中所建议的:http://captaincodeman.com/2010/02/03/absolute-urls-using-mvc-without-extension-methods/

票数 15
EN

Stack Overflow用户

发布于 2011-04-04 22:42:56

你可以使用Url.RouteUrl,一些重载接受一个协议参数,看起来像这样:

代码语言:javascript
复制
Url.RouteUrl("Product", new { itemId = "123456" }, "https");

看一下重载,看看你能用哪一个

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5539156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档