Web API接口在本地工作,但在部署到Azure网站后获得404

时间:2012-11-16 14:14:50

标签: .net asp.net-mvc-4 asp.net-web-api http-status-code-404 azure-cloud-services

我正在使用ASP.NET MVC 4网站。与MVC控制器一起,我有一个API控制器,它包含一个ajax GET API接口。当使用visual studio在本地调试时,它可以很好地工作。

但是,在我将其部署为Azure网站后,MVC控制器可以工作,但API控制器不再起作用。当jQuery代码尝试访问它时,它会返回如下响应:

  

未找到与请求URI“http://example.com”匹配的HTTP资源。

看起来至少路线有效(否则,会返回另一个404响应主体。)。

此外,我还有另一个纯MVC 4 Web API服务部署为Azure云服务。它完美地运作。因此,我想知道是什么原因导致MVC网站内的API失败?谢谢!

4 个答案:

答案 0 :(得分:2)

我们通过基于属性的路由为控制器命名,并为控制器内部的每个端点命名。出于安全考虑,不允许使用通用的GET,PUT,POST,PATCH。

Cyber​​security和我们的DevOps都需要防火墙日志,性能监控和安全监控。

考虑使用:

    [Route("api/inventory")]
    public class InventoryController : ApiController
    {
      [HttpGet("inventorylist")]
      public IActionResult InventoryList() 
      { 
      }

      [HttpGet("inventoryitem")]
      public ActionResult InventoryItem([FromQuery] string itemId) 
      {
      }
    }

答案 1 :(得分:0)

检查他们通常帮助的这些事情:

  1. 确保您的控制器类型是公共的,并且派生自ApiController
  2. 确保控制器名为'xxxxController',其中xxxx是控制器名称
  3. 在这种情况下,URL api / xxxx应该有效。

答案 2 :(得分:0)

这是一个常见问题当在IIS上部署MVC应用程序时,调用Web API公开的REST服务的HTTP URL将发生变化。如果您的api控制器名为MyApiController,那么在生产环境中,您应该在调用URL之前添加应用程序名称。这意味着/ api / MyApi将成为/ MyApp / api / MyApi。 MyApp是您网站的前缀(yourwebsite / MyApp)。

答案 3 :(得分:0)

我解决了这个问题。 我使用Telerik DataAccess作为我的ORM,项目应该Copy Local True

同样,如果它们似乎是第三方dll或来自nuget,则将所有引用添加为 Copy Local = True

通过在Web.config文件中的<customErrors mode="Off" />内添加<system.web>,您可以更轻松地找到错误。