1

私は Web API に取り組んでおり、コンテンツ ネゴシエーションとファイル拡張子を使用して、ブラウザー クライアントが受信したいコンテンツを指定できるようにしたいと考えています。例えば

http://localhost:54147/data.xslx.  

この記事 ( http://msdn.microsoft.com/en-us/magazine/dn574797.aspx ) によると、このようなものでルーティングをセットアップできるはずです

//setup default routes
config.Routes.MapHttpRoute(
    name: "Default",
    routeTemplate: "{controller}/{id}",
    defaults: new {id = RouteParameter.Optional}
);

// 拡張機能を使用してルートをセットアップします config.Routes.MapHttpRoute( name: "Url extension", routeTemplate: "{controller}/{action}.{ext}/{id}", defaults: new { id = RouteParameter.Optional } ) ;

ここに私の単純なコントローラーがあります

public class TestController : ApiController
{
    public HttpResponseMessage Get()
    {
        var items = new[] {"test1", "test2", "test3"};
        return Request.CreateResponse(HttpStatusCode.OK, items);
    }
}

この URL を使用して

http://localhost:54147/test/get.xlsx 

私は常にブラウザのデフォルトを取得します(クロムではxml、IE11ではjson)。

またはおそらく

http://localhost:54147/test.xlsx 

エラーが発生する

No HTTP resource was found that matches the request URI 'http://localhost:54147/test.xlsx'.

カスタムフォーマッタを使用できるはずです。しかし、それは起こっていません。これが私のカスタムフォーマッタのコンストラクタです。

public ExcelFormatter()
{
    MediaTypeMappings.Add(new UriPathExtensionMapping("xlsx", ContentType.Excel));
    SupportedMediaTypes.Add(new MediaTypeHeaderValue(ContentType.Excel));
}

記事によると、これは API Content Negotiator がカスタム フォーマッタを使用するのに役立つはずです。助けていただければ幸いです。

4

1 に答える 1