Asp.net mvc 从Visual Studio 2015调试时管理URL

Asp.net mvc 从Visual Studio 2015调试时管理URL,asp.net-mvc,visual-studio,visual-studio-2015,Asp.net Mvc,Visual Studio,Visual Studio 2015,我有一个asp.NETMVC站点,我在其中添加了一些knockoutjs。敲除代码使ajax请求来自控制器的数据,例如 $.getJSON(BASE_URL + 'MyTasks/GetDataPage', { userKey: vm.UserKey, pageSize: pageSize }, function (returnedPayload) { data = returnedPayload.filter(function (item) {

我有一个asp.NETMVC站点,我在其中添加了一些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);
我在布局页面的
中设置的基本URL常量如下:

<script type="text/javascript">
    var BASE_URL = '/bamportal/';
</script>
如果它试图寻址“”(不带“/bamportal/”),它就会工作


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

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

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

在razor代码中,您应该有如下内容

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

您的代码永远不应该知道站点将位于何处,您应该使用正确的帮助程序来确定操作/内容位于何处,这将防止路径出现任何问题。使用
Url.Content
Url.Action
它们将在代码中生成正确的路径/Url

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

在razor代码中,您应该有如下内容

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

快速且肮脏:

<script type="text/javascript">
    var BASE_URL = '@Constants.BaseUrl';
</script>
因此,当您在调试配置中编译应用程序时,您将获得
/
,而在发行版中,您将获得
/bamportal/

作为替代方案,可以使用和
appSettings
Web.config
获得更复杂和通用的方法:

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

var BASE_URL='@System.Configuration.ConfigurationManager.AppSettings[“BaseUrl”];
当然,在需要在不同域/URL上部署前端和后端的情况下,这将非常有用。

快速且脏:

<script type="text/javascript">
    var BASE_URL = '@Constants.BaseUrl';
</script>
因此,当您在调试配置中编译应用程序时,您将获得
/
,而在发行版中,您将获得
/bamportal/

作为替代方案,可以使用和
appSettings
Web.config
获得更复杂和通用的方法:

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

var BASE_URL='@System.Configuration.ConfigurationManager.AppSettings[“BaseUrl”];

当然,在需要在不同域/URL上部署前端和后端的情况下,这将非常有用。

感谢Federico,我使用了常量方法,它对我非常有效。感谢Federico,我使用了常量方法,它对我非常有效。