0

ハンモックとWP7でWCFWebAPIを使用しているときに、興味深い問題に直面しています。ご存知のように、WCF Web APIでは、Acceptヘッダーで指定した内容に基づいて応答タイプを変更できます。たとえば、Accept:application / jsonを送信した場合、応答はJSONになり、application / xmlを指定した場合、XMLを取得します。

そこで、Webブラウザから完全に機能するWebAPIを作成しました。さすがに欲しいタイプが手に入ります。ただし、これをWP7から使用する場合、Acceptヘッダーが何であるかは関係ありません。これは、WP7が/に置き換えたように見え、XMLのみを返します。

Facebook Graph APIを試してみたので、問題はハンモックではないことを知っています。Acceptを次のように変更すると:application / hello、不正なリクエストエラーが発生します。ただし、C#コードのWP7でこれを行うと、エラーはまったく発生せず、送信する内容に関係なく、戻りタイプはXMLになります。

この問題を回避するために、WCFWebAPIでJSON.Netシリアライザーを作成しました。メソッドでリターンタイプとしてHttpResponseMessageを使い始めるまで、すべてがうまく機能しました。これで、JSONシリアライザーを使用していても、HttpResponseMessageを使用するすべてのメソッドでXMLを取得できます。

ご覧のとおり、私は今ララランドにいます。

誰かがフィードバックを提供できますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

私はこれに遭遇し、CodePlexにこの問題を投稿しました。Nugetはまだ更新されていませんが、最新のソースをプルすると修正されます。これで、xmlフォーマッターを削除するか、組み込みのフォーマッターをクリアして、必要なものを追加できるようになります。私が見つけたもう1つの回避策は、組み込みのフォーマッターをクリアし、タイプにマップされた/タイプを受け入れるカスタムメディアタイプフォーマッターを作成することでした。

更新:これは、nugetのWCF Web APIPreview6で修正されました。

于 2011-10-13T05:43:03.900 に答える
1

WCF WebApiでは、必要に応じてクエリ文字列を使用して形式を指定できます。デフォルトで存在するRequestHeaderMappingに加えて、QueryStringMappingを使用して構成を更新する必要があります。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    var config = routes.GetDefaultHttpConfiguration();

    var jsonFormatters = config.Formatters.Where(f => f.SupportedMediaTypes.Any(mt => mt.MediaType == "application/json"));
    jsonFormatters.ToList().ForEach(f => f.MediaTypeMappings.Add(new QueryStringMapping("format", "json", "application/json")));

    routes.MapServiceRoute<BooksService>("books", config);

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}
于 2011-10-13T07:40:45.103 に答える