3

ASP.NETWebAPIでUriPathExtensionMappingを機能させるのに問題があります。私の設定は次のとおりです。

私のルートは次のとおりです。

            config.Routes.MapHttpRoute(
                name: "Api UriPathExtension",
                routeTemplate: "api/{controller}.{extension}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
               name: "Api UriPathExtension ID",
                routeTemplate: "api/{controller}/{id}.{extension}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

私のグローバルASAXファイルは次のとおりです。

    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

私のコントローラーは:

public IEnumerable<string> Get()
{
    return new string[] { "Box", "Rectangle" };
}

// GET /api/values/5
public string Get(int id)
{
    return "Box";
}

// POST /api/values
public void Post(string value)
{
}

// PUT /api/values/5
public void Put(int id, string value)
{
}

// DELETE /api/values/5
public void Delete(int id)
{
}

curlを使用してリクエストを行う場合、JSONがデフォルトの応答です。明示的にXMLをリクエストした場合でも、JSONを取得します。

curl http://localhost/eco/api/products/5.xml

戻り値:

"http://www.google.com"

誰かが私のセットアップの問題を見ることができますか?

次のコードは、ルートが構成された後、Global.asaxファイルの拡張子をマップします。

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.
        MediaTypeMappings.Add(
            new UriPathExtensionMapping(
                "json", "application/json"
        )
    );

    GlobalConfiguration.Configuration.Formatters.XmlFormatter.
        MediaTypeMappings.Add(
            new UriPathExtensionMapping(
                "xml", "application/xml"
        )
    );
4

2 に答える 2

6

次のように拡張マッピングを登録する必要がありますか?

config.Formatters.JsonFormatter.MediaTypeMappings.Add(new UriPathExtensionMapping("json", "application/json"));
config.Formatters.XmlFormatter.MediaTypeMappings.Add(new UriPathExtensionMapping("xml", "application/xml"));

例はここにあります。

アップデート

UriPathExtensionMapping拡張機能のプレースホルダーのコードを見ると、

/// <summary>
/// The <see cref="T:System.Uri"/> path extension key.
/// </summary>
public static readonly string UriPathExtensionKey = "ext";

したがって、ルートを({extension}ではなく{ext})に変更する必要があります。

config.Routes.MapHttpRoute(
            name: "Api UriPathExtension",
            routeTemplate: "api/{controller}.{ext}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
于 2013-02-06T12:09:30.497 に答える
1

この回答の補足として、まだコメントできないため、web.configに次の行が含まれていることも確認する必要があります

<modules runAllManagedModulesForAllRequests="true" />

セクション内<system.webServer>

私はそうしませんでした、そして私がその行を追加するまでこの例は私のために働きませんでした。

于 2014-08-02T22:09:12.853 に答える