21

我正在开发一个 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

4 回答 4

2

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

于 2014-03-24T21:34:02.717 回答
2

我们通过基于属性的路由为控制器命名,并为控制器内的每个端点命名。按照惯例,出于安全原因,不允许使用通用的 GET、PUT、POST、PATCH。

网络安全和我们的 DevOps 需要它用于防火墙日志、性能监控和安全监控。

考虑使用:

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

      [HttpGet("inventoryitem")]
      public ActionResult InventoryItem([FromQuery] string itemId) 
      {
      }
    }
于 2020-03-12T04:25:37.550 回答
1

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

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

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

于 2014-06-27T18:11:30.127 回答
1

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

  1. 确保您的控制器类型是公共的并且派生自 ApiController
  2. 确保控制器名为“xxxxController”,其中 xxxx 是控制器名称

在这种情况下,URL api/xxxx 应该可以工作。

于 2012-11-17T03:15:20.683 回答