1

これが本番サーバー(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を使用しています。どのような構成の違いがこの違いを引き起こすのか私には考えられません...

4

1 に答える 1

0

私はバカです。

「notifications?notificationType = comments」ではなく本番サーバーで「notifications?type = comments」を押していたため、これは機能していませんでした。

メソッドパラメータ名は、バインディングが発生するためにクエリ文字列パラメータ名と一致する必要があります。私はそれを知っていましたが、間違ったクエリ文字列パラメータ名を渡していたことに気づいていませんでした!何が起こったのかというと、数週間前にメソッドパラメータ名を変更し、その間に忘れてしまい、ブラウザのオートコンプリート関数が古いパラメータ名を含む履歴一致を提供してくれたことに気づきませんでした。

于 2012-12-09T00:22:11.263 に答える