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
属性を使用していません。
GETコントローラの操作を無効にしてから、POST操作を再試行してください。それがうまくいくかどうか教えてください。 –
@OrelEraki私はGETコントローラのアクションをコメントアウトしましたが、POST要求はまだ404です。 – alex
'GetUsers'のメソッドと属性を' PostUsers'に名前を変更してみてください(getメソッドはまだコメントされています)。 –