【问题标题】:Web api call works locally but not on AzureWeb api 调用在本地有效,但在 Azure 上无效
【发布时间】:2017-05-10 07:43:22
【问题描述】:

我有与以下问题相同的问题并尝试回答但从未解决问题

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 方法都有以下问题

【问题讨论】:

  • 即使我尝试删除 [Authorize] 和 [RequiresSSL] 属性

标签: asp.net-web-api http-status-code-404 azure-web-app-service


【解决方案1】:

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 类中设置 IncludeErrorDetailPolicy 属性后,您可以从 Web 服务器获取详细的错误消息。

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

【讨论】:

  • 根据您的回答尝试过,但同样的问题,标头请求 URL:XXXXXXX.azurewebsites.net/api/v2/configuration/Employee/1747 请求方法:OPTIONS 状态代码:404 未找到远程地址:23.100.46.198:443 推荐人策略:no-referrer- when-downgrade 即使对于普通的 testapi 控制器,使用简单的 get 方法
  • [RoutePrefix("api/v2/test")] public class testapiController : ApiController { #region testapi [Route("getstring")] [HttpGet] public IHttpActionResult getstring() { return Ok("成功”); } [Route("putstring")] [HttpPut] public IHttpActionResult putstring() { return Ok("Success"); } #endregion }
  • 清除 git repo 并仅重新推送所需的文件,它可以工作 - 因为我使用了持续部署到 Azure 功能
【解决方案2】:

Visual Studio 不会向 wwwroot 添加 default.html 页面,而 IIS 会。

只需将 default.html 页面添加到项目中的 wwwroot,然后重新部署到 Azure。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2013-08-02
    • 1970-01-01
    • 2020-11-04
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多