如何使用Url.Action <tcontroller> </tcontroller>强制http或https

时间:2011-06-01 18:35:08

标签: asp.net asp.net-mvc-3 ssl https mvccontrib

我正在使用MvcContrib中的强类型Url.Action方法在我的网站上生成所有网址。

例如:

Url.Action<CategoriesController>(c => c.List())

有没有办法强制此方法生成的网址使用http或https?现在它似乎只是创建相对于当前页面的URL。因此,例如,如果我在https页面上,它会使我的所有页眉和页脚链接都使用https,即使我不希望这些页面是安全的。

类似的东西:

Url.Action<CategoriesController>(c => c.List(), protocol: "https")

2 个答案:

答案 0 :(得分:3)

我不确定这是否完全回答了您的问题,但您可以将[RequireHttps]属性添加到要在SSL下强制执行的任何操作(或控制器)。由于Url.Action将根据当前方案/权限创建完全限定的URL,因此它最初会显示指向http://site/controller/action的链接。但是,RequireHttps属性会将方案切换为HTTPS,一旦在该方案中,Url.Action将适当地返回https://site/controller/action URL。

答案 1 :(得分:1)

不幸的是,MvcContrib的行动&lt; T&gt;扩展程序不支持生成https网址。

在内部,此方法从MvcFutures库调用Microsoft的LinkBuilder.BuildUrlFromExpression方法,这非常简单。它仅支持生成简单的相对链接,并且不支持构建到普通Url.Action方法中的许多功能,包括https和区域。只要MvcContrib扩展在内部依赖于此方法,它就不支持这些附加功能。

如果你想利用这些功能,你最好坚持使用Mvc的普通Url.Action。