2016-09-23 7 views
0

ルータを動作していないこのように構成されています // GET API /値/ 5ASP.NETコアルートは

[HttpGet("{id}")] 
public string Get(int id) 
{ 
    return "value" + id; 
} 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "api", 
     template: "api/{action}/{id?}"); 
}); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "spa-fallback", 
     template: "{*url}", 
     defaults: new { controller = "Home", action = "Index"}); 
}); 

私が要求にしようとしているコントローラのIアクションは、次のようになります

私がhttp://localhost:54057/api/values/getを要求すると、私は "value0"を取り戻します。

私がhttp://localhost:54057/api/values/getを要求すると、私は "value0"を返します。

http://localhost:54057/api/values/get/5をリクエストすると、404 Not Foundが返されます。

私のルートが正しく設定されていないのですか、または「id」パラメータがURLからコントローラアクションに渡されないのはなぜですか?

+0

[ASP.NETルーティングデバッガ](http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx/)FTW! –

+0

'{id:int}'を試してください。そしてメソッド内で、 'return" value "+ id.ToString();' – nurdyguy

+0

あなたの例では、URLの最後に "/ get"を入れる必要はありません。 URLは "/ api/values/5"にする必要があります。リクエストタイプが "get"の場合、そのアクションに適切にヒットします(下記の回答で提案された変更が適用されます)。 – mgiesa

答えて

0

私はコントローラを指定する必要があり、アクションではないと思います。あなたのルートのように定義する必要があります。

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "api", 
     template: "api/{controller}/{id?}"); <-- Note the change here 
}); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "spa-fallback", 
     template: "{*url}", 
     defaults: new { controller = "Home", action = "Index"}); 
}); 

パラメータが指定されなかったとき、あなたは結果を得るた理由は、おそらくと呼ばれている代替ルートによるものでした。どのルートが呼び出されているか知りたい場合は、Route Debuggingでこの記事をご覧ください。

+3

そのデバッグパッケージはコアで動作しないようです – Guerrilla