【问题标题】:Manage URL when debugging from Visual Studio 2015从 Visual Studio 2015 调试时管理 URL
【发布时间】:2016-08-13 17:57:58
【问题描述】:

我有一个 asp.net mvc 站点,我在其中添加了一些 knockoutjs。淘汰代码使 ajax 请求来自控制器的数据,例如

$.getJSON(BASE_URL + 'MyTasks/GetDataPage', { userKey: vm.UserKey, pageSize: pageSize }, function (returnedPayload) {
                data = returnedPayload.filter(function (item) {
                    return JSON.stringify(item).toLowerCase().indexOf(ft) != -1;
                });
                self.setPagingData(data,page,pageSize);

我在布局剃须刀页面的<head>中设置的BASE_URL常量如下:

<script type="text/javascript">
    var BASE_URL = '/bamportal/';
</script>

网站部署后一切正常。但是,当我通过按 F5 从 VS 运行网站时,我会得到一个 404,例如:

http://localhost:49601/bamportal/MyTasks/GetDataPage?userKey=2&pageSize=50 Failed to load resource

如果它尝试寻址“http://localhost:49601/MyTasks/GetDataPage”(没有“/bamportal/”),它将起作用。

这个问题的最佳解决方案是什么?

【问题讨论】:

    标签: asp.net-mvc visual-studio visual-studio-2015


    【解决方案1】:

    又快又脏:

    <script type="text/javascript">
        var BASE_URL = '@Constants.BaseUrl';
    </script>
    

    其中Constants 是一个静态类,定义为:

    public static class Constants {
        #if DEBUG
        public const string BaseUrl = "/";
        #else
        public const string BaseUrl = "/bamportal/";
        #endif    
    }
    

    因此,当您在调试配置中编译应用程序时,您将获得/,而在发布时您将获得/bamportal/

    作为替代方案,可以使用来自Web.configConfiguration TransformsappSettings 获得更复杂和通用的方法:

    <script type="text/javascript">
        var BASE_URL = '@System.Configuration.ConfigurationManager.AppSettings["BaseUrl"];';
    </script>
    

    当然,这在您需要在不同的域/url 上部署前端和后端的场景中非常有用。

    【讨论】:

    • 感谢 Federico,我使用了常量方法,它对我很有用。
    【解决方案2】:

    您的代码永远不应该知道网站将托管在哪里,您应该使用正确的帮助程序来确定操作/内容的位置,这将防止路径出现任何问题。使用Url.ContentUrl.Action 它们会在代码中生成正确的路径/url。

    例如,您的操作需要指向“MyTasks”、“GetDataPage”

    在你的剃刀代码中,你应该有类似

    的东西
    <div id="urls" data-url="@Url.Action("ActionMethodName","YourControllerName")"></div>
    

    然后在您的获取代码中获取存储的网址

    $.getJSON($("#urls").data("url"),
    

    进一步详细说明,此代码将适用于任何环境(生产、调试、iis、任何位置),无需开发人员担心或使用配置文件或任何其他过程进行调整。明天,如果您需要在“osportal”而不是“bamportal”上托管您的网站,则无需进行任何更改,这不应该成为您代码库的一部分。 最大的好处之一是,如果控制器或操作发生更改,编译器会让您知道该 url 不存在,您可以修复它。硬编码路径/网址/位置是一种非常糟糕/不可维护的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多