
Windows で作成し、fastcgi-mono-server4 と nginx を実行している Linux サーバー (Ubuntu 14.04) にコピーしたシンプルな ASP.NET WebForms アプリがあります。アプリは Windows では問題なく動作しますが、mono で実行するとWebResource.axd?d=...
404 エラーのためスクリプトを取得できません。そのため、が未定義のためすべてのポストバックが失敗します WebForm_OnSubmit()
。
ScriptManager
ページから自分のバリデーターとすべてのバリデーターを削除すると、WebResource.axd
は不要になるため、mono で正常に実行されます。ただし、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;
}
}