У меня есть действие, которое ничего не возвращает в определенных обстоятельствах. Действие по существу в этом случае:
[HttpGet]
[NoCache]
public JsonResult Search(SearchCriteriaModel search)
{
var searchResults = Searcher.PerformSearch(search);
//searchResults == null
return Json(searchResults, JsonRequestBehavior.AllowGet);
}
Это вызывается с помощью jQuery:
$.ajax({
url: "the url",
type: "GET",
data: {search criteria},
success: function(response) {
/*
in iis6 'response' === ''
in iis7.7 'response' === null, causing an error later
*/
}
});
В ii6 ответ представляет собой пустую строку. В iis7.5 ответ является null
.
Почему сценарий видит разницу?
а также
Как настроить iis7.5 так, чтобы скрипт увидел пустой ответ строки и продолжает работать правильно?
Дополнительно - веб-сервер визуальной студии также возвращает пустую строку. Точная настройка папки в качестве приложения IIS7.5 возвращает значение null.
Ответ с веб-сервера визуальной студии с пустым значением строки:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 10 Mar 2014 19:22:29 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Length: 0
Connection: Close
Ответ от IIS7.5 с нулевым значением:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 10 Mar 2014 19:22:32 GMT
Content-Length: 0
Переключите пул приложений с ASP.NET v4.0
на ASP.NET v4.0 Classic
и Content-Type
больше не будет отправлен:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 0
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
X-Powered-By: ASP.NET
Date: Mon, 10 Mar 2014 19:37:28 GMT
Content-Type: application/json
который сейчас отправляется. Так что теперь пустой ответ превращается в пустой объект javascript вместо пустой строки. Какую версию jQuery вы используете?