2016-10-12 27 views
0

MVC 5とWeb API 2を使用するプロジェクトがあります。ローカルでは、Web APIコントローラへのHTTP GETリクエストとPOSTリクエストの両方が動作しています。ウェブサイトは、外部環境に公開され、展開されると、GET要求はまだ動作しますが、POSTリクエストは404GETリクエストは動作しますが、Web API 2のPOSTリクエスト404

につながるここに私のAPIコントローラです:

public class ExampleApiController : ApiController 
{ 
    [HttpPost] 
    [Route("GetRoles")] 
    public IHttpActionResult GetRoles([FromBody] string userName) 
    { 
     // ... 
     return Json(response); 
    } 

    [HttpGet] 
    [Route("GetUsers")] 
    public HttpResponseMessage GetUsers() 
    { 
     HttpResponseMessage response; 
     // ... 
     return response; 
    } 
} 

ここに私のWebApiConfig.csファイルです

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 
public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

     config.Routes.MapHttpRoute(
      name: "Web API default route", 
      routeTemplate: "api/{controller}/{action}", 
      defaults: null 
     ); 
    } 
} 

は、ここに私のGlobal.asaxファイルです210

その他の注意:

  • クライアントが行っているPOST要求が正しくフォーマットされていることを確認しました。
  • 私はWeb.configに次のコードを追加しました:

    <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true" /> 
    </system.webServer> 
    
  • を私は自分のアプリケーションを展開していた環境(例えばURLがhttp://qa.example.comようになります)認証が必要なサブドメインを持っています。私は(例えば)http://username:[email protected]/GetUsersを使ってテストしています。

  • 私のコントローラはRoutePrefix属性を使用していません。

+0

GETコントローラの操作を無効にしてから、POST操作を再試行してください。それがうまくいくかどうか教えてください。 –

+0

@OrelEraki私はGETコントローラのアクションをコメントアウトしましたが、POST要求はまだ404です。 – alex

+0

'GetUsers'のメソッドと属性を' PostUsers'に名前を変更してみてください(getメソッドはまだコメントされています)。 –

答えて

0

405エラーをしましたしかし、この問題は、サーバー側のサードパーティのセキュリティクライアントが、要求を特にブロックしていることに関連していました。 Juliano's commentは、これを実現する方向で私を助けました。

-2

私は、Web APIドキュメント(ヘルプページ)を使用するか、Web APIメソッドの実際のURLとパラメータを確認することをおすすめします。あなたは何かを欠いているはずです将来の読者のための超便利ではない -

、数日前に私は顔同様の問題(。POSTメソッドは、ローカルでの作業が、QAのENV上で動作していない)が、その時、私はなっていた問題が解決された

関連する問題