Angular $http POST到远程GoDaddy windows服务器返回500内部服务器错误

本文关键字:服务器 windows 返回 错误 内部 GoDaddy http POST Angular | 更新日期: 2023-09-27 17:50:37

我有一个简单的用户表单来发送电子邮件。当用户提交表单时,它的数据被传递给一个webmethod(称为"SendParameters"),该方法处理服务器端电子邮件处理。

下面的代码在本地运行良好,但是当我将它部署到我的远程主机时,我得到http://simoneduca.com/Default.aspx/SendParameters 500 Internal Server Error

这是我在app.js中的呼叫

var myApp = angular.module('MyApp', ['ngMessages', 'ngAnimate']);  
myApp.controller('FormCtrl', function ($scope, $http, $timeout) {      
    $scope.master = {};    
    $scope.reset = function () {
        $scope.user.name = "";
        $scope.user.emailAddress = "";
        $scope.user.subject = "";
        $scope.user.message = "";
        $scope.contactForm.$setPristine();
        $scope.contactForm.$setUntouched();
    };
    $scope.submit = function (user) {
        $scope.master = angular.copy(user);
        $http({
            method: "POST",
            url: "Default.aspx/SendParameters",
            headers: { 'Content-Type': 'application/json; charset=utf-8' },
            data: JSON.stringify($scope.master)
        }).success(function (data, status, header) {
            $scope.resultMessage = data.d;
            $scope.showMessage = true;
            $timeout(function () {
                $timeout(function () {
                    $scope.showMessage = false;
                }, 2000);
            }, 3000);
            console.log('data.d: ', data.d)
            console.log('status: ', status)
            console.log('headers: ', header)
            console.log('data: ', data)
            $scope.reset();
        });  
    };
});

这是我的html表单在index.html

<!DOCTYPE html>
<html ng-app="MyApp">
<head>
  <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>   
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-messages.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-animate.min.js"></script>
  <script src="app.js"></script>
</head>
<body>
  <h1>FORM</h1>
  <div class="cform" id="contact-form">
    <form role="form" id="contactForm" ng-controller="FormCtrl" name="contactForm" novalidate>
      <div class="form-group" ng-class="{'has-error': contactForm.name.$invalid && contactForm.name.$dirty}">
        <label for="name">Your Name</label>
        <input type="text" runat="server" name="name" class="form-control" id="name" placeholder="Your Name" ng-model="user.name" ng-minlength="3" ng-maxlength="30" required />
        <div ng-messages="contactForm.name.$error" class="error" ng-if="contactForm.name.$dirty" ng-messages-include="error-messages.html">
        </div>
      </div>
      <div class="form-group" ng-class="{'has-error': contactForm.emailAddress.$invalid && contactForm.emailAddress.$dirty}">
        <label for="emailAddress">Your Email</label>
        <input type="email" id="email" placeholder="Your Email" class="form-control" name="emailAddress" ng-model="user.emailAddress" ng-minlength="5" ng-maxlength="30" required />
        <div ng-messages="contactForm.emailAddress.$error" class="error" ng-if="contactForm.emailAddress.$dirty" ng-messages-include="error-messages.html">
        </div>
      </div>
      <div class="form-group" ng-class="{'has-error': contactForm.subject.$invalid && contactForm.subject.$dirty}">
        <label for="subject">Subject</label>
        <input type="text" ng-model="user.subject" class="form-control" name="subject" id="subject" placeholder="Subject" required />
        <div ng-messages="contactForm.subject.$error" class="error" ng-if="contactForm.subject.$dirty" ng-messages-include="error-messages.html">
        </div>
      </div>
      <div class="form-group" ng-class="{'has-error': contactForm.message.$invalid && contactForm.message.$dirty}">
        <label for="message">Describe your project</label>
        <textarea class="form-control" ng-model="user.message" id="message" name="message" rows="5" required></textarea>
        <div ng-messages="contactForm.message.$error" class="error" ng-if="contactForm.message.$dirty" ng-messages-include="error-messages.html">
        </div>
      </div>
      <button id="sendEmail" runat="server" ng-click="submit(user)" type="submit" ng-disabled="contactForm.$invalid" class="btn btn-theme pull-right">SEND</button>
      <button type="button" ng-click="reset()" class="btn">Reset</button>
      <div ng-show="showMessage" class="feedback">{{ resultMessage }}</div>
    </form>
  </div>
</body>
</html>

这是我在default。aspx.cs中的web方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Net.Mail;
using System.Web.Services;

namespace SimoWebTest1
{
    public partial class singlePage : System.Web.UI.Page
    {
        [WebMethod]
        public static string SendParameters(string name, string emailAddress, string subject, string message)
        {
            if (string.IsNullOrEmpty(emailAddress) || string.IsNullOrEmpty(subject) || string.IsNullOrEmpty(message))
            {
                return string.Format("Please complete the form.");
            }
            else
            {
                try
                {
                    SmtpClient client = new SmtpClient();
                    client.Port = 80;
                    client.Host = "smtpout.europe.secureserver.net";
                    client.EnableSsl = false;
                    client.Timeout = 10000;
                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
                    client.UseDefaultCredentials = false;
                    client.Credentials = new System.Net.NetworkCredential("iam@simoneduca.com", "password");
                    MailMessage mm = new MailMessage(emailAddress, "iam@simoneduca.com", subject, message);
                    mm.BodyEncoding = System.Text.UTF8Encoding.UTF8;
                    mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                    client.Send(mm);
                    return string.Format("Your message has been sent. Thank you {0}!", name);
                }
                catch (Exception)
                {
                    //return string.Format("Inner Exception: {0}.<br/>Message: {1} ", ex.InnerException, ex.Message);
                    return string.Format("Oops, your message could not be sent. Please retry.");
                }
            }
        }
    }
}

我已经尝试将application/json; charset=utf-8更改为application/x-www-form-urlencoded; charset=utf-8

and data: JSON.stringify($scope.master) to data: $.param($scope.master) .

这似乎改善了情况:返回status 200,但不是预期的JSON字符串,而是返回整个html页面。

有人知道为什么吗?

我还尝试在我的提交函数中使用Angular的快捷方法,并改变数据传递给url参数的格式

var transform = function (user) {
    $scope.master = angular.copy(user);
    return $.param($scope.master);
}
$scope.submit = function (user) {
        $scope.master = angular.copy(user);
        $http.post("Default.aspx/SendParameters", $scope.master, {
            headers: { 'Content-Type': 'application/json; charset=UTF-8' },
            transformRequest: transform
        }).success(function (data, status, header) {
            $scope.resultMessage = data.d;
                    $scope.showMessage = true;
                    $timeout(function () {
                        $timeout(function () {
                            $scope.showMessage = false;
                        }, 2000);
                    }, 3000);
                    console.log('data.d: ', data.d)
                    console.log('status: ', status)
                    console.log('headers: ', header)
                    console.log('data: ', data)
                    $scope.reset();
        });
    };

最后但并非最不重要的,我也打电话给Godaddy(我的主机提供商)问他们是否支持Json扩展,他们说他们不支持。

这可能是问题吗?有办法绕过它吗?

我认为普朗克会有帮助,但呼叫失败:400 Bad Request .

Angular $http POST到远程GoDaddy windows服务器返回500内部服务器错误

我也遇到过类似的问题。最后我不得不使用托管选项,ASP。Net设置,在底部有一个CAS信任级别选项。默认设置为Mid,我必须把它调到full。一旦我这样做了,它就运行得非常好。

网站和域名>>(找到你正在工作的域)>>显示更多(面板底部的选项卡)>> ASP。网络设置

我希望这对你有帮助!