我有一个ASP.NET MVC / WebAPI混合项目,它在VS2012开发服务器中运行得很好。它有一个标准的MVC {controller}/{action}/{id}
路由,以及一个额外的WebAPI路由api/{controller}/{id}
。以/api/...
开头的请求被定向到WebAPI,其他请求被定向到正常的MVC。
当我将其部署到本地IIS时,正常的MVC路由正在运行。但是,/api
对WebAPI的调用导致异常
Access to the path 'C:\inetpub\wwwroot\myapp\web.config' is denied.
然后我尝试在inetpub
文件夹及其子文件夹上设置适当的安全权限。这没有任何帮助,因为正常的MVC请求正在运行,我不怀疑这个问题与安全相关。
然后我开始 Sysinternals Process Monitor ,看看w3wp.exe
在请求期间做了什么。事实证明,IIS在这里寻找web.config
:
C:\inetpub\wwwroot\myapp\api\web.config
C:\inetpub\wwwroot\myapp\api\mycontroller\web.config
当然,那里没有web.config
。
如何设置IIS以识别这两条路线?
答案 0 :(得分:1)
我不相信这是您的路由问题。问题是给IIS的权限我不时遇到这个错误。根据您运行的应用程序池标识,您需要为该实体提供权限。这是一个非常详尽的解释的链接
IIS AppPoolIdentity and file system write access permissions
基本上右键单击项目文件夹,转到属性,单击安全选项卡,然后您将看到组或用户名。这些是允许实体对该目录执行读取和/或写入操作。单击编辑然后添加;从这里你将“输入要选择的对象名称”通常IIS再次在IIS_IUSRS下,这取决于你的应用程序池配置,你应该从提到的错误继续!
我希望这有帮助!