2016-05-28 13 views
1

私はこのような私のWebApiConfigの設定があります。次のように私は、Global.asaxの中にルートを登録しているWeb API呼び出しがアクションに到達しませんか?

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

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

を:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
    } 

マイウェブAPIコントローラクラスは、次のようになります。

[RoutePrefix("api/upload")] 
public class UploadController : ApiController 
{ 
    [HttpGet] 
    [Route("")] 
    public string Upload() 
    { 
     return "hello"; 
    } 
} 

私は、下の画像に示すように、フィドラーでWeb APIのアクションを呼び出しています:

enter image description here

リクエストを送信すると、404 Not Found not foundエラーが表示されます。私は間違って何をしていますか?

+0

クロス起点リクエストエラーですか? – Pushpendra

+0

いいえ。要求はIISサーバーが実行されているのと同じドメインに対して行われます。 –

+0

呼び出し中にサービスのインスタンスを実行していますか? – Pushpendra

答えて

2

は MVCルートマッピングする前にWeb API を設定してください:

protected void Application_Start() 
{ 
    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 

は何が起こっていると考えていることは、フレームワークはMVC 1にあなたのルートをマップしようとしていることです。このURI localhost:8170/api/uploadが、Uploadという名前のアクションを持つApiというMVCコントローラを参照していると仮定しています。

MVCの前にWeb APIルートを登録すると、api/で始まるルートが正しいApiControllerに一致するようになります。

関連する問題