HTMLからのPOSTがASP.NETで受け取れない
久々に一人でハマった話。備忘として残しておきます。
ひょんなことから、HTML(正しくはASP)からPOSTしてASP.NET側よりRequest.Formで値を取得していますが、突然空(nullではない)が返ってきて正しく取得できない状況になりました。
<form action="http://xxx.aspx" method="post"> <input type="hidden" name="SitenCD" value="5">
通常であればRequest.Form("SitenCD")で簡単に取得出来るはずなのですが・・・。
さんざんネットやら本やらを探しましたが有力情報ゲット出来ず。一抹の不安が頭をよぎります・・・。
ネットに情報が無い=超初歩的ミスをやらかしている
結論から言うと、全く関係の無い情報から答えに行きつきました。原因は短縮URL機能です。ASP.NETにはGlobal.asaxのApplication_Startイベントにより、拡張子を取り除いた短縮URLにルート設定するRouteConfig.RegisterRoutesメソッドが呼び出されます。こいつが原因でした。
public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { // アプリケーションのスタートアップで実行するコードです RouteConfig.RegisterRoutes(RouteTable.Routes); //←コレ BundleConfig.RegisterBundles(BundleTable.Bundles); } }
Public Class Global_asax Inherits HttpApplication Sub Application_Start(sender As Object, e As EventArgs) ' アプリケーションの起動時に呼び出されます RouteConfig.RegisterRoutes(RouteTable.Routes) '←コレ BundleConfig.RegisterBundles(BundleTable.Bundles) End Sub End Class
xxx.aspxに要求が来ると応答はxxxを指定してしまいます。つまり、xxxにリダイレクトされる=xxxをGET要求するということです。だからRequest.Formで取得出来なかったというオチでした。
なお、URLルーティングの話は以下を参考にどうぞ。
docs.microsoft.com