佐々木屋

技術的なことから趣味まで色々書きます

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