【问题标题】:How to get the page origin in razor?如何在剃须刀中获取页面来源?
【发布时间】:2012-08-03 15:14:03
【问题描述】:

我正在寻找这个 javascript 的等价物

window.location.origin

但服务器端,同时构建 mvc 页面。

例如,如果你在这里 http://website.com/123, 它会返回

http://website.com

重要的是我有“http://”部分

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 razor request


【解决方案1】:

我很喜欢

string url = Request.Url.PathAndQuery.length > 1
  ? Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, string.Empty)
  : url;

保留您的 Http/Https、端口(如果适用)和主机名/IP。

DotNetFiddle Examples

更新为将 PathAndQuery 长度设为 1 的帐户。

【讨论】:

  • +1。显然这不是一个人应该如何操作 Url(UriBuilder 会更安全),但在大多数情况下都可以。
  • 如果Request.Url.PathAndQuery 等于/ 即为空,这将不起作用。
  • @libraheem 好收获!更新
【解决方案2】:

javascript中的window.location.origin返回当前url的协议、端口(如果有的话)、域和扩展名。

如果您想从 URL 中获取相同的信息,接受的答案将为您提供。

如果您想要相同的行为,即一段 javascript 正在调用您的服务器方法,并且您想知道它从哪里调用,您可以检查 HttpRequest.URLReferrer。然而,这很容易被欺骗,因此并不可靠。

【讨论】:

  • 使用UrlReferrer 是危险的!可以是spoofed / set to anything。如果您没有正确逃脱等(例如XSS),这会打开一大堆蠕虫。此外,当我点击来自 Google.com 的页面时,您的方法将返回 google.com,而不是 website.com。永远不要相信用户输入;推荐人正是如此。
  • @RobIII 你是对的。更新了我的答案以反映我的原始意见。
【解决方案3】:

你可以试试

@String.Format("{0}://{1}", Request.Url.Scheme, Request.Url.Authority)

或者

@String.Format("{0}://{1}", Request.Url.Scheme, Request.Url.Host)

授权将包括端口号

【讨论】:

  • 我想你的权限上会有一个额外的:
  • @ErikPhilips 在我的测试中似乎没有
  • 哦,是的,你是对的,忘记了端口在 url 上,我很少使用它。
【解决方案4】:

我认为您正在寻找 Request.Url 或 RawUrl。

Request.Url 的Uri.Scheme 将为您提供有关 http/https 差异的信息。

【讨论】:

  • Request.Url 还将包括/123
  • @JohnH,我已经更新了答案... Manatherin 的答案(+1)也已经包含了所有内容。
  • 这些都不会提供所请求的内容。考虑到以下 URL http://localhost:63105/home/index,Request.Url 将返回 http://localhost:63105/home/index,Request.RawUrl 将返回 /home/index。我们的两个答案都不如 Erik,所以我会删除我的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-10-27
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
相关资源
最近更新 更多