【问题标题】:Wrong port number in mvc 4 windows Azure Request.Urlmvc 4 windows Azure Request.Url中的端口号错误
【发布时间】:2014-01-11 13:09:41
【问题描述】:

我正在编写一个小的 asp.net MVC4 Web 应用程序。项目模板是 Visual Studio 2012 中的 azure mvc 4 模板。当我在 razor 视图中请求 Request.Url 时,我得到了错误的端口号。例如,如果我的网页 url 是

http://127.0.0.1:81/mypage 

我明白了

http://127.0.0.1:82/mypage 

当我从 Request.Url 获取 url 时。我在 Visual Studio 2012 获得的默认 azure 模拟器中运行它。

为什么端口号错误? 如何纠正?

【问题讨论】:

    标签: asp.net-mvc-4 azure razorengine


    【解决方案1】:

    找到答案。这篇博客文章很好地解释了原因。

    http://blogs.staykov.net/2013/05/windows-azure-basicscompute-emulator.html

    Azure 模拟器尝试尽可能多地模拟真实环境。模拟器包括一个隐藏的负载平衡器 (LB)。 LB 角色尝试绑定端口 81 并失败(因为它已经绑定),然后尝试绑定到 82 等等(在我的情况下,它在端口 82 上成功)。在此绑定之后,Request.Url 将提供 LB Url。要获取原始基本网址,您可以使用此

    var request = Request.RequestContext.HttpContext.Request;
    
    string baseUrl = request.UrlReferrer.Scheme + "://" +
                 request.UserHostAddress + ":" +
                 request.UrlReferrer.Port; 
    

    可以直接在 Razor 语法中使用

    【讨论】:

    • 请编辑您的答案以给出实际解释(即使只是一个简短的解释)。不知道提供的博客链接是否会保持原样。
    • 呃,这非常令人沮丧,而且显然是一个错误。我有一个使用单个实例设置的 Azure 角色,但当我使用 Request.Url 时它仍然返回:82。我有几个地方会重定向到当前 URL(以防止回发重试),并且在这个 Azure 模拟器的上下文中它们都被破坏了。
    • 对于做我所做的任何人来说它的价值:我使用的是返回端口 82 的 Response.Redirect(Request.Url.ToString())。我改为 Response.Redirect(Request. RawUrl) 并解决了我的问题,因为它使用相对 URL 并排除了端口。
    猜你喜欢
    • 2013-02-16
    • 2015-06-27
    • 2019-07-01
    • 2013-01-17
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多