[asp.net-mvc]角的 $http.get 返回 404 我 ASP.NET 行动吗?

发布时间: 2017/3/25 1:45:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有下面的 angularjs 代码︰

  $http.get("/Home/GetEmails").then(function (response) {
            $scope.emails = response.data;
            $scope.init($scope.emails);
            $scope.totalEmails = $scope.emails.length;
        });

当我开发本地时,它工作正常,但当我将发布到一个活的服务器,它给出以下错误消息︰

Failed to load resource: the server responded with a status of 404 (Not Found). 它正在寻找http://xaisoft.com/Home/GetEmails,但它不能找到它。 有一些事情需要做在 ASP.NET MVC 和/或角得到这个工作。 目前,只有在我的 HomeController 返回一个 JSON 对象的 GetEmails 操作。

HomeController

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult GetEmails()
    {
        return Json(new[]
        {
            new
            {
                from = "Jet Blue",
                to = "Me",
                subject = "Buy one seat, get one free!",
                body = "That and helping Data finish 'Pop Goes the Weasel'. Also counts as a CMOH.",
                date = "Dec 20th 12:22 PM",
                isImportant = false,
                isStarred = true,
                isChecked = false,
                isRead = true
            },
            new
            {
                from = "Publix",
                to = "Me",
                subject = "Check this weeks BOGO deals",
                body = "Hurry, ends Thursday!",
                date = "Mar 15th 8:15 AM",
                isImportant = false,
                isStarred = false,
                isChecked = false,
                isRead = false
            },
            new
            {
                from = "AJ Carpio",
                to = "Me",
                subject = "When Life Gives You Questions, Google has Answers",
                body = "Get more life quotes here",
                date = "Mar 15th 8:15 AM",
                isImportant = true,
                isStarred = false,
                isChecked = false,
                isRead = true
            }
        },JsonRequestBehavior.AllowGet);
    }

}

解决方法 1:

像你一样,你不应该在 ASP.NET MVC 应用程序中硬编码 url:

$http.get("/Home/GetEmails")

你应始终使用 url 佣工。例如在视图中你可以设置一个变量︰

<script type="text/javascript">
    var getEmailsUrl = @Url.Action("GetEmails", "Home");
</script>

您可以稍后使用在吴脚本中︰

$http.get(getEmailsUrl)

此 Url 佣工如 Url.Action 是要考虑的一些因素,如为宿主环境的虚拟目录和您的路由配置。所有这些因素都可以改变各种环境之间,如果你硬编码您的 javascript 中的 url 你差不多将获得大量的 404年。


这里是更有棱角的方式做这件事而不是注册一个全球 javascript 变量。您可以使用 $provide :

<script type="text/javascript">
    angular.module('myApp').config(['$provide', function ($provide) {
        // Here you can also register a complex javascript object that will serve
        // as configuration for your app and can contain multiple urls

        $provide.value('getEmailsUrl', '@Url.Action("GetEmails", "Home")');
    }]);
</script>

然后你可以注入 getEmailsUrl 在您的控制器和服务︰

app.controller('HomeController', ['$scope', 'getEmailsUrl', function ($scope, getEmailsUrl) {
    // You can use the getEmailsUrl variable here.
}]);
官方微信
官方QQ群
31647020