Я построил веб-сайт с использованием ASP.NET MVC и Knockoutjs. Это размещено в IIS на Windows Sever 2012. Существует еще одно веб-приложение, в котором я использую ajax для POST, и это приложение не дает никаких ошибок. Кнопка «Отправить» на веб-сайте привязана с помощью привязки кликов к этой функции. Это работает, когда я запускаю его в режиме отладки на локальном хосте.500 Внутренняя ошибка сервера ajax post json
self.SubmitEvaluation = function() {
reqUrl = "/Home/SubmitEvaluation";
$.ajax({
type: "POST",
url: reqUrl,
data: JSON.stringify({ evaluation: ko.toJSON(self) }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response == 1) {
self.EvalComplete(true);
} else {
self.EvalComplete(false);
alert("Submission Failed. Please resubmit!!!")
}
},
error: function (jqXHR, exception) {
if (jqXHR.status === 0) {
alert('Not connect.\n Verify Network.');
} else if (jqXHR.status == 404) {
alert('Requested page not found. [404]');
} else if (jqXHR.status == 500) {
alert('Internal Server Error [500].'+exception.toString());
} else if (exception === 'parsererror') {
alert('Requested JSON parse failed.');
} else if (exception === 'timeout') {
alert('Time out error.');
} else if (exception === 'abort') {
alert('Ajax request aborted.');
} else {
alert('Uncaught Error.\n' + jqXHR.responseText);
}
}
});
В домашнем контроллере у меня есть эти два веб-метода.
[HttpGet]
public string Test()
{
Logger.Logger.WriteLog("Test", "Inside Test");
TestModel product = new TestModel();
product.Name = "Apple";
product.Price = "3.99M";
return JsonConvert.SerializeObject(product);
}
[HttpPost]
public int SubmitEvaluation(string evaluation)
{
Logger.Logger.WriteLog("Submitevaluation", "Inside SubmitEvaluation");
int result = -1;
try
{
EvaluationModel eval = JsonConvert.DeserializeObject<EvaluationModel>(evaluation);
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
string sql = "INSERT INTO xyz table blah blah blah";
MySqlCommand cmd = new MySqlCommand(sql, conn);
result = cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Logger.WriteLog("Submitevaluation", ex.ToString());
}
return result;
}
Получаю сообщение Internal Sever Error 500 из запроса Ajax, когда я нажимаю кнопку «Отправить».
Но если я это сделаю http://xxx.xxx.xxx.xxx/Home/Test Получаю обратно результат json {"Name": "Apple", "Price": "3.99M"}.
заголовок Ответ Скрипач
HTTP/1.1 500 Internal Server Error Cache-Control: частный Content-Type: Текст/html; кодировка = UTF-8 Сервер: Microsoft-IIS/8.0 X-AspNetMvc-Version: 4.0 X-Сеть САШ-версия: 4.0.30319 X-Powered-By: ASP.NET Дата: Чт, 9 января 2014 16 : 22: 16 GMT Контент-длина: 276
После включения ошибок клиента и подробного сообщения об ошибке я получаю это сообщение.
Could not load file or assembly 'MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The system cannot find the file specified
Я скачал разъем Mysql из http://dev.mysql.com/downloads/connector/net/ и я добавил узел правой кнопкой мыши на References> Расширения и выбора версии 4.0. Я также попробовал 4.5.
Оценка '' оценки JSON.Stringyfy() и проверка – Arpit
'данные: JSON.stringify ({оценка: ko.toJSON (self)}),' - Вы кодируете JSON с двойным кодированием. Вы уверены, что хотите этого? Используйте 'data: {оценка: ko.toJS (self)}'. Вам не нужно вообще кодировать JSON, jQuery делает это для вас. – Tomalak
См. [Этот вопрос] (http://stackoverflow.com/questions/5385714/deploying-website-500-internal-server-error), чтобы обнаружить основную ошибку. – CodeCaster