我有一个简单的 ASP.NET WebForms 应用程序,它是在 Windows 中创建的,并复制到运行 fastcgi-mono-server4 和 nginx 的 Linux 服务器 (Ubuntu 14.04)。该应用程序在 Windows 上运行良好,但在 Mono 上运行时,WebResource.axd?d=...
由于 404 错误而无法获取脚本。因此,所有回发都会失败,因为 WebForm_OnSubmit()
未定义。
如果我ScriptManager
从页面中删除我的和所有验证器,它就可以在 Mono 上正常运行,因为WebResource.axd
不再需要。但是,我不想这样做,因为我想使用 AJAX。
我尝试过解决方案这个帖子,但没有效果。我也尝试将该标签添加到该system.webServer/handlers
部分,但也没有用。
我也尝试过本文不使用 ScriptManager 来使用 AJAX。它在 Windows 上运行良好,但在 Mono 中失败,我的所有 Web 服务请求都出现 404 错误。
所以我的问题是:为什么我在尝试下载时出现 404 错误WebResource.axd
,我该如何修复它?我需要修复一些 mono 或 nginx 配置吗?
编辑:这是我的 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
我使用以下方法找到了答案本文。基本上,我需要在我的 nginx 配置中为 .axd 文件添加一个特殊位置。我的最终配置如下;它还允许页面方法工作。
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;
}
}