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
.
我也遇到过类似的问题。最后我不得不使用托管选项,ASP。Net设置,在底部有一个CAS信任级别选项。默认设置为Mid,我必须把它调到full。一旦我这样做了,它就运行得非常好。
网站和域名>>(找到你正在工作的域)>>显示更多(面板底部的选项卡)>> ASP。网络设置
我希望这对你有帮助!