Web api 调用在本地有效,但在 Azure 上无效
Web api call works locally but not on Azure
我遇到与以下问题相同的问题并尝试回答但从未解决问题
Web api interface works locally but not on Azure
Web API interface works locally but gets 404 after deployed to Azure Website
还有更多类似类型的……
当我尝试调用 api 时,它显示 404 Not Found
我的 WebApi.config 文件
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "versionApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
API 控制器
[Authorize]
[RequiresSSL]
[RoutePrefix("api/v2/Configuration")]
public class ConfigurationAPIv2Controller : ApiController
{
[Dependency]
public IConfigurationServicev2 configurationService { get; set; }
[Dependency]
public IAccountService accountService { get; set; }
#region testapi
[Route("getstring")]
[HttpGet]
public IHttpActionResult getstring()
{
return Ok("Success");
}
[Route("putstring")]
[HttpPut]
public IHttpActionResult putstring()
{
return Ok("Success");
}
#endregion
文件夹结构如下:
我对 get 和 Put 方法都遇到了以下问题
404错误可能是路由问题引起的。由于您正在为 Web API 使用路由属性。请确保 GlobalConfiguration.Configure(WebApiConfig.Register);高于其他代码。
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
和config.MapHttpAttributeRoutes();代码在其他路由配置之上。
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "versionApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
另外,尝试在你的Controller中删除以下代码,测试是否与依赖注入模块有关。
[Dependency]
public IConfigurationServicev2 configurationService { get; set; }
[Dependency]
public IAccountService accountService { get; set; }
如果它也不适合你。在 WebApiConfig class 中设置 IncludeErrorDetailPolicy 属性 后,您可以从 Web 服务器获取详细的错误消息。
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
Visual Studio 不会向 wwwroot 添加 default.html 页面,而 IIS 会。
只需将 default.html 页面添加到项目中的 wwwroot,然后重新部署到 Azure。
我遇到与以下问题相同的问题并尝试回答但从未解决问题
Web api interface works locally but not on Azure
Web API interface works locally but gets 404 after deployed to Azure Website
还有更多类似类型的……
当我尝试调用 api 时,它显示 404 Not Found
我的 WebApi.config 文件
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "versionApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
API 控制器
[Authorize]
[RequiresSSL]
[RoutePrefix("api/v2/Configuration")]
public class ConfigurationAPIv2Controller : ApiController
{
[Dependency]
public IConfigurationServicev2 configurationService { get; set; }
[Dependency]
public IAccountService accountService { get; set; }
#region testapi
[Route("getstring")]
[HttpGet]
public IHttpActionResult getstring()
{
return Ok("Success");
}
[Route("putstring")]
[HttpPut]
public IHttpActionResult putstring()
{
return Ok("Success");
}
#endregion
文件夹结构如下:
我对 get 和 Put 方法都遇到了以下问题
404错误可能是路由问题引起的。由于您正在为 Web API 使用路由属性。请确保 GlobalConfiguration.Configure(WebApiConfig.Register);高于其他代码。
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
和config.MapHttpAttributeRoutes();代码在其他路由配置之上。
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "versionApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
另外,尝试在你的Controller中删除以下代码,测试是否与依赖注入模块有关。
[Dependency]
public IConfigurationServicev2 configurationService { get; set; }
[Dependency]
public IAccountService accountService { get; set; }
如果它也不适合你。在 WebApiConfig class 中设置 IncludeErrorDetailPolicy 属性 后,您可以从 Web 服务器获取详细的错误消息。
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
Visual Studio 不会向 wwwroot 添加 default.html 页面,而 IIS 会。
只需将 default.html 页面添加到项目中的 wwwroot,然后重新部署到 Azure。