1

をコーディングしましたが、このコントローラーAPI controllerに を追加したいと考えています。RoutePrefix

私のコントローラ名はMapCompanyControllerで、このコントローラには というメソッドが 1 つありGetMapCompanyます。

現在、次の Web アドレスを呼び出すことでこのメソッドにアクセスできます。/api/MapCompany/GetMapCompany

RoutePrefixこのメソッドへのパスが次のようになるように a を追加したいと思います。/api/1_0/MapCompany/GetMapCompany

これは私がやったことです:

  1. 私はに追加[RoutePrefix("1_0")]しましたMapCompanyController
  2. 私はに追加routes.MapMvcAttributeRoutes();しました RegisterRoutes RouteConfig

/api/MapCompany/GetMapCompanyこれを行った後も、アドレスを使用してメソッドにアクセスできます/api/1_0/MapCompany/GetMapCompanyが、次のエラーが発生します。

HTTP Error 404.0 - Not Found

このコードについて何か助けてもらえますか?

前もって感謝します

編集

次のような単純なコントローラーを作成しました。

public class TestRouteController : ApiController
{
    // GET: api/TestRoute/5
    public string Get(int id)
    {
        return "value";
    }
}

関数にアクセスするGetには、次の URL が正しいです。

API/TestRoute/5

コードを次のように変更すると:

public class TestRouteController : ApiController
{
    // GET: api/TestRoute/5
    [Route("routetest")]
    public string Get(int id)
    {
        return "value";
    }
}

Get関数へのパスは何ですか?

私は次のことを試しました:

  1. /api/TestRoute/5
  2. /api/routetest/5
  3. /routetest/api/TestRoute/5
  4. /api/TestRoute/routetest/5
4

1 に答える 1

2

これが本当に ApiController である場合、これは RouteConfig ではなく WebApiConfig に登録する必要があります:

{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
        }
    }
}

そして、あなたの global.asax で:

GlobalConfiguration.Configure(WebApiConfig.Register);

MVC と WebApi でのルーティングは異なります

編集: コントローラーとメソッドのルートの定義は webapi で簡単です。コントローラー クラスに RoutePrefix 属性を追加するだけで、メソッドに Route 属性を追加するかどうかを指定できます。

[RoutePrefix("api/TestRoute")]
public class TestRouteController : ApiController
{
    [Route("testroute")]
    [HttpGet()]
    public string Get(int id)
    {
        return "value";
    }
}

このように、ルートは api/TestRoute/testroute?id=whatever である必要があります

RouteConfig は mvc "Controller" 用です。webApi "ApiController" の場合は、上記のようにルートを登録し、属性で定義するだけです。RouteConfig を隠す必要はありません :)

于 2014-11-03T16:11:19.817 に答える