IIS Expressでは問題ないが、サーバのIIS上でASP .NET COREでPostが実行できない。


ASP .NET COREでAjaxによるデータの受け渡しを行うため、そのコードの組み方を調べております。  
そこで、下記のリンクのサンプルが非常に分かりやすかったため、ダウンロードしてサーバへデプロイしました。

<https://www.aspsnippets.com/Articles/Using-jQuery-AJAX-in-ASPNet-Core-Razor-
Pages.aspx>

LocalのIIS
Expressではボタンを押すことで、Index.cshtml内の"OnPostGetTime"メソッドが確実に実行され、正常にPostが実行されているのを確認できます。  
しかし、サーバ側のIIS8.5上にデプロイした場合、エラーが発生してPostがはじかれてしまうという問題が出てしまいます。

原因が分からず、サーバのIISでチェックすべき項目がありましたら、ご教授お願いしたいと思います。  
なお、サーバ側の設定ですが、.NET Core用のアプリケーションプールを作成し、.NET CLRバージョンも「マネージコード無し」になっております。

状況としては下記です。

  1. サーバ側の仕様：  
Windows 2012 R2  
IIS 8.5 + .NET CORE 2.1ランタイムを動作

  2. クライアント側の開発環境：  
Windows 10  
Visual studio 2017

  3. IIS Express上でAjaxは正常に動作し、クライアント⇒Localサーバ側へPostが確実に実行される。

  4. IIS 8.5上にデプロイすると、クライアント⇒サーバ側へのPostがはじかれ、下のような文字化けエラーが発生してしまう。

[![画像の説明をここに入力](https://i.stack.imgur.com/8Mjlc.jpg)](https://i.stack.imgur.com/8Mjlc.jpg)




コメント欄でのアドバイスありがとうございました。

url: "/Index?handler=GetTime" の部分の解釈がIISのバージョンによって異なることが分かりました。  
アプケーションのアドレスを `http://example.com/test/`
とした場合、各々のバージョンによってurlが下記のように解釈されてしまいます。

  * IIS Express  
`http://localhost:{ポート番号}/test/Index?handler=GetTime`

  * IIS 8.5 (server 2012R2)  
`http://example.com/Index?handler=GetTime`

  * IIS 10 (server 2016)  
`http://example.com/test/Index?handler=GetTime`

IIS8.5の場合、存在しないアドレスが指定されてしまうため、404エラーになるようです。IIS 10の場合は問題なく動きました。

対策としては下記のようにページのアドレスを追加することで解消できました。

[code]

    url: window.location.href + 'Index?handler=GetTime',
    
[/code]




コメント欄でのアドバイスありがとうございました。

url: "/Index?handler=GetTime" の部分の解釈がIISのバージョンによって異なることが分かりました。  
アプケーションのアドレスを `http://example.com/test/`
とした場合、各々のバージョンによってurlが下記のように解釈されてしまいます。

  * IIS Express  
`http://localhost:{ポート番号}/test/Index?handler=GetTime`

  * IIS 8.5 (server 2012R2)  
`http://example.com/Index?handler=GetTime`

  * IIS 10 (server 2016)  
`http://example.com/test/Index?handler=GetTime`

IIS8.5の場合、存在しないアドレスが指定されてしまうため、404エラーになるようです。IIS 10の場合は問題なく動きました。

対策としては下記のようにページのアドレスを追加することで解消できました。

[code]

    url: window.location.href + 'Index?handler=GetTime',
    
[/code]

