我正在使用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失败?谢谢!
答案 0 :(得分:2)
我们通过基于属性的路由为控制器命名,并为控制器内部的每个端点命名。出于安全考虑,不允许使用通用的GET,PUT,POST,PATCH。
Cybersecurity和我们的DevOps都需要防火墙日志,性能监控和安全监控。
考虑使用:
[Route("api/inventory")]
public class InventoryController : ApiController
{
[HttpGet("inventorylist")]
public IActionResult InventoryList()
{
}
[HttpGet("inventoryitem")]
public ActionResult InventoryItem([FromQuery] string itemId)
{
}
}
答案 1 :(得分:0)
检查他们通常帮助的这些事情:
在这种情况下,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>
,您可以更轻松地找到错误。