1

Web API 2 で asp.net MVC 5 を使用しています。新しい属性ルーティングをテストしていますが、これは十分に単純に思えます。msdn の紹介リンクをたどりましたが、まだ非常に簡単な設定ができません。

API 構成ファイル:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

API コントローラーで:

public class RecruitingController : ApiController
{
    ...snip...
    [Route("Recruiting/countries/all/")]
    [ResponseType(typeof(List<Country>))]
    public async Task<IHttpActionResult> GetCountries()
    {
        var countries = ctx.Countries.ToList();
        if (countries.Count == 0)
        {
            return NotFound();
        }

        return Ok(countries);
    }

}

私の見解では、ajax経由でルーティングを呼び出しています。クロム開発者ツールでは、このルートに到達しようとしています:

http://localhost:43736/api/Recruiting/countries/all/ 

そして私は404応答を得ています。

ここで構文を台無しにしていますか? 次のような ajax 呼び出しがあります。

$.getJSON(apiBaseUrl + "/countries/all/", function (data) {
    $.each(data, function () {
        var dropdownCountry = new DropdownCountry();
        $.each(this, function (k, v) {
            if (k === "Name") {
                dropdownCountry.name = v;
            }
            if (k === "Key") {
                dropdownCountry.key = v;
            } 
        });
        self.orgCountryDdl.push(dropdownCountry);

    });
    alert(DropdownCountry());
});

apiBaseUrl は 'api/recruiting' です

4

2 に答える 2

3

リクエスト URL で従来のルートを使用しているようです...リクエスト URL は次のようにする必要がありhttp://localhost:43736/Recruiting/countries/all/ます ...従来のルートに一致するリクエストは、属性付きのコントローラー/アクションに決して到達できないことに注意してください。

于 2014-01-18T17:54:15.163 に答える
0

クラス レベルでも API ベース URL 属性を追加できます。

次に、すべてのメソッド属性がクラス レベルの属性から構築されます。

于 2014-01-19T02:02:11.507 に答える