在MVC中使用端口处理ajax调用的最佳方法

时间:2017-06-08 19:30:28

标签: javascript c# ajax asp.net-mvc

我在Google找不到更好的解决方案。

我有一个MVC应用程序。 当我使用Visual Studio时,URL是

http://localhost:12345/NewApp - 这有效

当我将其部署到我的本地网络服务器时,URL为

http://win2k12/NewApp - 这有效

我的路由器上有一个端口转发到端口8878以指向win2k12服务器。我有一个域名(例如http://mydomain.uk),它被设置为指向我的实际IP xxx.xxx.xxx.xxx地址。因此,当我想从外部访问我的MVC应用程序时,我使用此URL

http://mydomain.uk:8878/NewApp - 这只适用于第一级。当我通过像这样的ajax调用Action时 enter image description here

从上图中,baseUrl只返回导致错误的http://mydomain.uk/NewApp(没有端口)。我目前的解决方法是硬编码不理想的端口。

我使用了baseUrl,因为如果我不这样做,虚拟目录就无法识别。我确信这只是一种解决方法,我只是想知道是否有一种正确的方法。

<script>
$(document).ready(function () {
    var baseUrl = '@HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")';
    $("a").click(function (e) {
        if ($(this).attr("action") == "Edit") {
            $("#dlgCode").empty()
                .load(baseUrl + "/Codes/Edit?id=" + $(this).attr("code_id") + "&timestamp=" + new Date().getTime());
            setTimeout(function () {
                $("#dlgCode").css("display", "");
                $("#dlgCode").dialog({
                    width: "25%",
                    maxWidth: "768px",
                    title: "Edit Code"
                });
            }, 1000);
        } else if ($(this).attr("action") == "Delete") {
            $("#dlgCode").empty()
                .load(baseUrl + "/Codes/Delete?id=" + $(this).attr("code_id") + "&timestamp=" + new Date().getTime());
            setTimeout(function () {
                $("#dlgCode").css("display", "");
                $("#dlgCode").dialog({
                    width: "25%",
                    maxWidth: "768px",
                    title: "Delete Code"
                });
            }, 1000);
        } else if ($(this).attr("action") == "Add") {
            $("#dlgCode").empty()
           .load(baseUrl + "/Codes/Add?id=" + $(this).attr("group_id")  + "&timestamp=" + new Date().getTime());
            setTimeout(function () {
                $("#dlgCode").css("display", "");
                $("#dlgCode").dialog({
                    width: "25%",
                    maxWidth: "768px",
                    title: "Add Code"
                });
            }, 1000);
        }
        else if ($(this).attr("action") == "Cancel") {
            $("#dlgCode").dialog('close');
        }
        //console.log($("#dlgCode").html());
        //alert($(this).attr("code_id"));
    });
});

更新:

我尝试从视图中输出端口并重新部署并从外部访问它,但识别的端口是80.

alert('@HttpContext.Current.Request.Url.Port');

0 个答案:

没有答案