我有一个非常小的AngularJS Web应用程序,我已经编写过,并且我尝试在我的计算机上本地托管IIS,以便它可用于我的LAN上的其他设备。在这个应用程序中,我使用Web API 2调用数据访问,它通过Entity Framework连接到我的数据库。
通过在Visual Studio中启动应用程序,我在本地运行应用程序时运行正常。但是,当我将其部署到我的IIS安装时,每当请求发送到Web API网址时,我都会收到404错误。页面本身加载,我可以导航到我的其他页面,只有在我收到我在Web API控制器中声明的一个方法的请求时才会收到404错误。
我有Windows 7 Pro 64位,并通过控制面板中的添加/删除Windows功能安装了IIS。我已经通过aspnet_regiis -i命令安装了ASP.NET 4.0。发布时我通过右键单击项目并选择“发布”在Visual Studio社区2015中这样做。在第一次设置发布时,我使用了官方ASP.NET站点的指南(http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-to-iis)
我已尝试以下步骤解决问题但没有成功:
<validation validateIntegratedModeConfiguration="false" />
和<modules runAllManagedModulesForAllRequests="true" />
添加到web.config <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
处理程序的路径(通过删除句点)
<remove name="UrlRoutingModule" />
和<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>
添加到<system.webServer>
模块部分我已经遍布各个互联网寻找近两天的解决方案而且尚未找到解决方案。在遇到同样问题的人们网站上似乎有许多类似的问题,但到目前为止,我发现的几个问题都没有解决。
对我而言,这应该花费很多精力才能以这种方式开展工作。您可以提供任何帮助,我将不胜感激。
TL; DR:使用AngularJS应用程序部署到IIS 7.5时Web API 2中断。有关尝试补救的步骤,请参阅上面的列表。
更新1
我尝试使用IIS.net中的以下链接设置失败的请求跟踪:
以下是完整跟踪请求中的snipet。如果需要,我很乐意提供完整的文件。
更新2
通过“添加/删除”功能删除WebDAV无法解决问题。错误是相同的&#34;文件无法找到&#34;上面的错误,这里是完整跟踪请求的新片段
我的WebApiConfig类如下所示
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我的Web API类看起来像
[RoutePrefix("api/foods")]
public class FoodsController : ApiController
{
[Route("all")]
[HttpGet]
public List<tblFood> getAllFoods()
{
List<tblFood> foodsList = new List<tblFood>();
try
{
using (FoodEntities dbContext = new Entity_Models.FoodEntities())
{
foodsList = (from food in dbContext.tblFoods select food).ToList();
}
}
catch(EntityException e)
{
throw new ApplicationException(createErrorStringFromException(e));
}
return foodsList;
}
}
来自我的angular JS服务的示例调用使用调用
$http.get('/api/foods/all')
在我的类中声明了一些其他的CRUD方法,但是所有这些方法都以相同的方式声明,并且为了简洁起见我在上面的代码中省略了这些方法。我一直在使用&#34; all&#34;路线作为我的考验。
我在设置路由时使用了资源http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api和http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2。
答案 0 :(得分:0)
失败的请求跟踪日志显示IIS正在调用WebDAV来处理请求,这表明请求是使用PUT
方法进行的。例如。
禁用WebDAV模块,然后重试。请遵循以下指南:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications
此QA:ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8