2016-04-07 13 views
0

MVCスタイルのビューを返す必要があるWeb APIプロジェクトがあります。私は、このようなWeb APIプロジェクトでMVCコントローラに到達していません

しかし
public class MVCController: Controller 
{ 
    [HttpGet] 
    [Route("api/mvc/test")] 
    public ActionResult test() 
    { 
     return View(); 
    } 
} 

、私はウェブからこのコントローラにアクセスしようとすると、私はコントローラに到達するように見えるカントとしての私のMVCコントローラをしました。

{"メッセージ"要求URI 'http://localhost/foo/api/mvc/test'に一致するHTTPリソースが見つかりませんでした。 "、" MessageDetail ":" 'mvc'というコントローラに一致するタイプが見つかりませんでした。 「}

Googleで検索を行った後、人々は

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

にwebapiconfigのルーティングプロパティを変更するために私に言っているように見えるが、私はまだ運を持っていないように見えます。しかし私は、このような

public class MVCController: ApiController 
{ 
    [HttpGet] 
    [Route("api/mvc/test")] 
    public IHttpActionResult test() 
    { 
     return Ok(); 
    } 
} 

としてWEBAPIコントローラに私のコントローラを変更した場合は、私は、コントローラに到達することができます。..誰かが何が起こっているように私にいくつかの洞察力を与えることができれば、それははるかに高く評価されるだろう。

UPDATE 以下の応答を読んだ後、私はこのように私のコントローラを更新しました:

public class MVCController: Controller 
{ 
    [HttpGet] 
    public ActionResult test() 
    { 
     return View(); 
    } 
} 

しかし、ローカルホスト/ MVCController /テストはまだ私に404エラーを与えているようだとコントローラがありますヒットしません。私の初心者には申し訳ありません。

+0

私はweb-apiと同じ方法でmvcコントローラをフォーマットすると考えていたので、apiはちょうどテストしていました。私はconfig.MapHttpAttributeRoutes();を持っていた右のomgのLOOL –

答えて

1

このコードを持つWebApiConfig.csというファイルがありますか?

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 } 
     ); 
    } 
} 

ここでは、Web APIコントローラ用にルーティングパターンが定義されています。ですから、api /何かのリクエストはWeb APIエンドポイントのリクエストとみなされます。これは、mvcコントローラのルートを登録する前にWebApiConfig.Registerコールを呼び出さなければならないためです。経路登録の順序は重要です。

protected void Application_Start() 
{ 
    GlobalConfiguration.Configure(WebApiConfig.Register); // first one  
    RouteConfig.RegisterRoutes(RouteTable.Routes); //second one 

} 

登録事項の順序ので、リクエストがapi/somethingに来るとき、それはウェブAPIやフレームワークのルート登録と照合される場合は、ウェブAPIのcontroller.sに

をマッチングを探すためにしようとしますあなたは経路登録方法を呼び出す順序を入れ替えると、あなたの要求は機能します。 Web APIコントローラにアクセスしようとすると、他の部分に影響する可能性があります。

ところで、MVCコントローラのルートパターンにapi/を入れてもよろしいですか?あなたが本当に通常の慣習(*controllername/action*)よりもいくつかの異なるURL pattenを必要としない限り、それ自身のRoute属性を削除するだけです。デフォルトのルート定義では、yourSite/mvc/test要求に対して動作します。

+0

あなたは必死の対策だった。 –

+0

それを削除するソリューションはありますか? –

+0

あなたのmvcコントローラのルートからapiを削除するだけです。 – Shyju

関連する問題