gpt4 book ai didi

c# - 如何在反向代理后面获取应用程序基本 url

转载 作者:行者123 更新时间:2023-11-30 13:01:06 24 4
gpt4 key购买 nike

在通过反向代理/网关的请求的上下文中,有没有什么方法可以让 ASP.NET 应用程序知道自己的路由,从而导出其 url 路径和主机名?

当通过网关请求这个 url 时:

http://conoso.com/behind/some/reverseproxy/api/values/

网关正在将请求重新路由到其他位置:

http://10.0.0.0/api/values

它正在使用 DefaultApi 路由访问以下 ApiController ValuesController 的 Get 方法:

// GET api/values
public HttpResponseMessage Get()
{
var res = Request.CreateResponse();
res.Headers.Add(
"Location",
Url.Link(
"DefaultApi",
new
{
id = 1
}));
return res;
}

它返回以下 header 值:

Location: http://10.0.0.0/api/values/1

虽然我希望发送有效路径:

Location: http://conoso.com/behind/some/reverseproxy/api/values/1

在框架中使用内置方法的替代方法是手动格式化字符串:

var baseUrl = "http://conoso.com/behind/some/reverseproxy";
string.Format("{0}/values/1", baseUrl);

但这会散发出一些邪恶的代码味道。有没有人可以建议更简洁的方法?

最佳答案

我们的安全入口服务器背后也有同样的问题。对于 REST 调用,我们希望在服务器端生成 url 以使其在 java 脚本中可用。但是他们没有包含安全入口服务器添加的子路径。

所以我们想出了一个类似的解决方法(在布局页面中呈现):

<a id="urlBase" href="/" style="display: none;"></a>
<script type="text/javascript">
baseUrl = document.getElementById('urlBase').getAttribute('href');
</script>

href="/" 已被入口服务器替换为 href="/path/",我们可以很容易地连接 baseUrl 在访问 REST 服务时使用我们的相对路径。

希望对你的情况也有帮助。

(我发布了相同的答案here,希望可以复制粘贴)

关于c# - 如何在反向代理后面获取应用程序基本 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com