これが本番サーバー(Win2K8 R2 + IIS 7.5)ではなく開発サーバー(IIS Expressを使用)で機能する理由に戸惑っています。
私は非常に単純なWebAPIコントローラーメソッドを持っています:
public HttpResponseMessage Get(string notificationType = "all", int skip=0, int take=25) {
Trace.WriteLine(String.Format("Hello, world! From NotifcationsController#Get notificationType={0} skip={1} take={2}", notificationType, skip, take));
Trace.WriteLine(String.Format("And furthermore, HttpContext.Current.Request[notificationType]={0}", HttpContext.Current.Request["notificationType"]));
Trace.WriteLine(String.Format("And finally, HttpContext.Current.Request.QueryString[notificationType]={0}", HttpContext.Current.Request.QueryString["notificationType"]));
...
}
の開発サーバーではhttp://localhost:1398/api/notifications?notificationType=comments
、動作します。私はこれをtrace.axdで見ます:
Trace Information
Category Message From First(s) From Last(s)
Hello, world! From NotifcationsController#Get notificationType=comments skip=0 take=25
And furthermore, HttpContext.Current.Request[notificationType]=comments
And finally, HttpContext.Current.Request.QueryString[notificationType]=comments
しかし、でこのコントローラーをhttp://api.nameofmywebsite.com/api/notifications?type=comments
押すと、trace.axdでこれが表示されます。
Trace Information
Category Message From First(s) From Last(s)
Hello, world! From NotifcationsController#Get notificationType=all skip=0 take=25
And furthermore, HttpContext.Current.Request[notificationType]=
And finally, HttpContext.Current.Request.QueryString[notificationType]=
...
Querystring Collection
Name Value
type comments
これは私には非常に奇妙に思えます。trace.axdの内容に基づくと、ルーティングの問題ではないようです...正しいコントローラーとアクションにヒットしています。
クエリ文字列パラメーターが本番環境のコントローラーアクションのパラメーターにマップされないのはなぜですか?
価値があるものは何でも、私は開発とサーバーの両方で同じweb.configを使用しています。どのような構成の違いがこの違いを引き起こすのか私には考えられません...