Asp.net mvc 从Visual Studio 2015调试时管理URL
我有一个asp.NETMVC站点,我在其中添加了一些knockoutjs。敲除代码使ajax请求来自控制器的数据,例如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) {
$.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,我使用了常量方法,它对我非常有效。