
У меня есть простое приложение ASP.NET WebForms, которое я создал в Windows и скопировал на сервер Linux (Ubuntu 14.04), на котором запущены fastcgi-mono-server4 и nginx. Приложение отлично работает на Windows, но при запуске на Mono оно не может получить скрипт WebResource.axd?d=...
из-за ошибки 404. Таким образом, все постбэки терпят неудачу, поскольку WebForm_OnSubmit()
is undefined.
Если я удалю свой ScriptManager
и все валидаторы со страницы, она будет работать нормально на mono, потому что WebResource.axd
больше не требуется. Однако я не хочу этого делать, потому что хочу использовать AJAX.
Я попробовал решение вэта почта, но это не дало эффекта. Я также пробовал добавить этот тег в system.webServer/handlers
раздел, но это тоже не сработало.
Я также попробовал следоватьЭта статьяиспользовать AJAX без ScriptManager. Это работало нормально в Windows, но не сработало в Mono, выдав мне ошибку 404 для всех моих запросов веб-сервиса.
Итак, мой вопрос: почему я получаю ошибку 404 при попытке загрузить WebResource.axd
, и как мне ее исправить? Есть ли какая-то конфигурация mono или nginx, которую мне нужно исправить?
EDIT: вот моя конфигурация nginx:
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/example.access.log main;
location / {
root /var/www/www.example.com;
index Default.aspx;
try_files $uri $uri/ /Default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
решение1
Я нашел ответ, используяЭта статья. По сути, мне нужно было добавить специальное расположение для файлов .axd в моей конфигурации nginx. Моя окончательная конфигурация ниже; она также позволяет работать методам страницы.
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/www.example.access.log;
location ~\.(aspx|axd)(.*) {
include fastcgi_params;
fastcgi_split_path_info ^(.+.aspx)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
}
location / {
root /var/www/www.example.com;
index Default.aspx;
try_files $uri $uri/ $uri.aspx /Default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}